summaryrefslogtreecommitdiff
path: root/src/eval/ops.rs
diff options
context:
space:
mode:
authorLaurenz <laurmaedje@gmail.com>2021-08-31 12:59:53 +0200
committerLaurenz <laurmaedje@gmail.com>2021-08-31 12:59:53 +0200
commit3481d8cc81a2b3a14118869c7f0ffe204ff3efc8 (patch)
tree907efa2e092366a24e25243854b1a4e088cc04a9 /src/eval/ops.rs
parentee84bf74083f5b9cc88a2a0a968dc905b1eef22c (diff)
More utility functions
- join("a", "b", "c", sep: ", ") - int("12") - float("31.4e-1") - str(10) - sorted((3, 2, 1))
Diffstat (limited to 'src/eval/ops.rs')
-rw-r--r--src/eval/ops.rs13
1 files changed, 11 insertions, 2 deletions
diff --git a/src/eval/ops.rs b/src/eval/ops.rs
index 6d34b877..c7a45614 100644
--- a/src/eval/ops.rs
+++ b/src/eval/ops.rs
@@ -291,12 +291,21 @@ pub fn compare(lhs: &Value, rhs: &Value) -> Option<Ordering> {
match (lhs, rhs) {
(Bool(a), Bool(b)) => a.partial_cmp(b),
(Int(a), Int(b)) => a.partial_cmp(b),
- (Int(a), Float(b)) => (*a as f64).partial_cmp(b),
- (Float(a), Int(b)) => a.partial_cmp(&(*b as f64)),
(Float(a), Float(b)) => a.partial_cmp(b),
(Angle(a), Angle(b)) => a.partial_cmp(b),
(Length(a), Length(b)) => a.partial_cmp(b),
+ (Relative(a), Relative(b)) => a.partial_cmp(b),
+ (Fractional(a), Fractional(b)) => a.partial_cmp(b),
(Str(a), Str(b)) => a.partial_cmp(b),
+
+ // Some technically different things should be comparable.
+ (&Int(a), &Float(b)) => (a as f64).partial_cmp(&b),
+ (&Float(a), &Int(b)) => a.partial_cmp(&(b as f64)),
+ (&Length(a), &Linear(b)) if b.rel.is_zero() => a.partial_cmp(&b.abs),
+ (&Relative(a), &Linear(b)) if b.abs.is_zero() => a.partial_cmp(&b.rel),
+ (&Linear(a), &Length(b)) if a.rel.is_zero() => a.abs.partial_cmp(&b),
+ (&Linear(a), &Relative(b)) if a.abs.is_zero() => a.rel.partial_cmp(&b),
+
_ => Option::None,
}
}