Initial Dever 0.0.1
This commit is contained in:
commit
81233d098c
1479 files changed
+163782
No files matched your search
@@ -0,0 +1,76 @@
|
||||
use super::checked;
|
||||
|
||||
mod handler_range;
|
||||
mod range;
|
||||
|
||||
#[test]
|
||||
fn decimal_and_float_clauses_cover_their_actual_value_domains() {
|
||||
for text in [
|
||||
"pick(value: Decimal < 0.0) (answer: Int) { answer = -1 }\npick(value: Decimal >= 0.0) (answer: Int) { answer = 1 }",
|
||||
"pick(value: other) (answer: Int) { answer = 1 }\npick(value: -0.0) (answer: Int) { answer = 0 }",
|
||||
"pick(value: null) (answer: Int) { answer = 0 }\npick(value: Decimal < 0.0) (answer: Int) { answer = -1 }\npick(value: other) (answer: Int) { answer = 1 }",
|
||||
"pick(value: 1.0e0) (answer: Int) { answer = 1 }\npick(value: other) (answer: Int) { answer = 0 }",
|
||||
"pick(value: null) (answer: Int) { answer = 0 }\npick(value: 0.0e0) (answer: Int) { answer = 1 }\npick(value: other) (answer: Int) { answer = 2 }",
|
||||
"pick(value: Int <= 9223372036854775807) () {}",
|
||||
"pick(value: Int >= -9223372036854775808) () {}",
|
||||
] {
|
||||
checked(text).unwrap_or_else(|error| panic!("{text}\n{error:?}"));
|
||||
}
|
||||
for text in [
|
||||
"pick(value: Decimal < 0.0) () {}",
|
||||
"pick(value: Decimal <= 0.0) () {}\npick(value: Decimal >= 0.0) () {}",
|
||||
"pick(value: 1.0) () {}\npick(value: 1.00) () {}\npick(value: other) () {}",
|
||||
"pick(value: 0.0e0) () {}\npick(value: -0.0e0) () {}\npick(value: other) () {}",
|
||||
"pick(value: 1.0e0) () {}",
|
||||
"pick(value: Float) () {}\npick(value: other) () {}",
|
||||
"pick(value: Int > 9223372036854775807) () {}\npick(value: other) () {}",
|
||||
] {
|
||||
let error = checked(text).unwrap_err();
|
||||
assert_eq!(error.code, "C009", "{text}: {error:?}");
|
||||
}
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn decimal_partitions_use_exact_successors_at_precision_and_exponent_limits() {
|
||||
for (left, right) in [
|
||||
("1.0", "1.000000000000000000000000000000001"),
|
||||
("0.0", "1e-6176"),
|
||||
("-1e-6176", "0.0"),
|
||||
(
|
||||
"9.999999999999999999999999999999998e6144",
|
||||
"9.999999999999999999999999999999999e6144",
|
||||
),
|
||||
] {
|
||||
let text = format!(
|
||||
"pick(value: Decimal <= {left}) () {{}}\npick(value: Decimal >= {right}) () {{}}"
|
||||
);
|
||||
checked(&text).unwrap_or_else(|error| panic!("{text}: {error:?}"));
|
||||
}
|
||||
for text in [
|
||||
"pick(value: Decimal <= 1.0) () {}\npick(value: Decimal >= 1.000000000000000000000000000000002) () {}",
|
||||
"pick(value: Decimal > 9.999999999999999999999999999999999e6144) () {}\npick(value: other) () {}",
|
||||
"pick(value: Decimal < -9.999999999999999999999999999999999e6144) () {}\npick(value: other) () {}",
|
||||
] {
|
||||
assert_eq!(checked(text).unwrap_err().code, "C009", "{text}");
|
||||
}
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn numeric_pattern_validation_rejects_invalid_bounds_and_mixed_types() {
|
||||
for (text, code) in [
|
||||
("pick(value: 9223372036854775808) () {}", "C008"),
|
||||
("pick(value: 1e9999) () {}", "C008"),
|
||||
(
|
||||
"pick(value: Decimal < 0.12345678901234567890123456789012345) () {}",
|
||||
"C008",
|
||||
),
|
||||
("pick(value: Int < 1.5) () {}", "C008"),
|
||||
("pick(value: Float < 1.0e0) () {}", "C005"),
|
||||
("pick(value: Decimal? < 1.0) () {}", "C005"),
|
||||
("pick(value: 1.0) () {}\npick(value: Float) () {}", "C005"),
|
||||
] {
|
||||
assert_eq!(checked(text).unwrap_err().code, code, "{text}");
|
||||
}
|
||||
assert!(checked("pick(value: Int >= 1 and) () {}").is_err());
|
||||
assert!(checked("pick(value: Decimal < 1.0 and) () {}").is_err());
|
||||
}
|
||||
Reference in new issue
Block a user