From 0e5fe9b9acac1c97d28412e78b220c696b3c841b Mon Sep 17 00:00:00 2001 From: Elijah Koulaxis <90087463+kx0101@users.noreply.github.com> Date: Sat, 31 Jan 2026 03:57:51 +0200 Subject: [PATCH] feat: add tests for number semantics (#555) --- tests/interpreter/cases/arithmetic/mod.rs | 52 +++++++++- tests/interpreter/cases/arithmetic/tests.yaml | 97 +++++++++++++++++++ 2 files changed, 148 insertions(+), 1 deletion(-) diff --git a/tests/interpreter/cases/arithmetic/mod.rs b/tests/interpreter/cases/arithmetic/mod.rs index ac02625..9112bce 100644 --- a/tests/interpreter/cases/arithmetic/mod.rs +++ b/tests/interpreter/cases/arithmetic/mod.rs @@ -27,6 +27,34 @@ fn basic() -> Result<()> { div { 21 / 5 == 4.2 } + + eq1 { 1 == 1.0 } + eq2 { 1 == 1.00 } + neq1 { 1 != 1.0001 } + + sum { 0.1 + 0.2 == 0.3 } + diff { 0.3 - 0.2 == 0.1 } + product { 0.1 * 0.2 == 0.02 } + quotient { 0.3 / 0.1 == 3.0 } + + lt { 1 < 1.0001 } + le { 1 <= 1.0 } + gt { 1.0001 > 1 } + ge { 1.0 >= 1 } + neg_lt { -1 < 0 } + neg_le { -1 <= -1 } + + div1 { 1 / 2 == 0.5 } + div2 { 5 / 2 == 2.5 } + + neg1 { -1 == -1 } + neg2 { -1 + 2 == 1 } + neg3 { -(2 + 3) == -5 } + neg4 { 1 - -1 == 2 } + + big1 { 1000000000000000000000 + 1 == 1000000000000000000001 } + big2 { 2 * 1000000000000000000000 == 2000000000000000000000 } + big3 { 2 / 1e18 == 2e-18 } "#; let expected = vec![Value::from_json_str( @@ -34,7 +62,29 @@ fn basic() -> Result<()> { "add" : true, "sub" : true, "mul" : true, - "div" : true + "div" : true, + "eq1": true, + "eq2": true, + "neq1": true, + "sum": true, + "diff": true, + "product": true, + "quotient": true, + "lt": true, + "le": true, + "gt": true, + "ge": true, + "neg_lt": true, + "neg_le": true, + "div1": true, + "div2": true, + "neg1": true, + "neg2": true, + "neg3": true, + "neg4": true, + "big1": true, + "big2": true, + "big3": true }"#, )?]; diff --git a/tests/interpreter/cases/arithmetic/tests.yaml b/tests/interpreter/cases/arithmetic/tests.yaml index 2eb706b..7e80d41 100644 --- a/tests/interpreter/cases/arithmetic/tests.yaml +++ b/tests/interpreter/cases/arithmetic/tests.yaml @@ -19,3 +19,100 @@ cases: c: 1 d: -2 + - note: integer-float-equality + data: {} + modules: + - | + package test + + eq1 = 1 == 1.0 + eq2 = 1 == 1.00 + neq1 = 1 != 1.0001 + query: data.test + want_result: + eq1: true + eq2: true + neq1: true + + - note: float-precision + data: {} + modules: + - | + package test + + sum = 0.1 + 0.2 + diff = 0.3 - 0.2 + product = 0.1 * 0.2 + quotient = 0.3 / 0.1 + query: data.test + want_result: + sum: 0.30000000000000004 + diff: 0.09999999999999998 + product: 0.020000000000000004 + quotient: 2.9999999999999996 + + - note: numeric-comparisons + data: {} + modules: + - | + package test + + lt = 1 < 1.0001 + le = 1 <= 1.0 + gt = 1.0001 > 1 + ge = 1.0 >= 1 + neg_lt = -1 < 0 + neg_le = -1 <= -1 + query: data.test + want_result: + lt: true + le: true + gt: true + ge: true + neg_lt: true + neg_le: true + + - note: division + data: {} + modules: + - | + package test + + div1 = 1 / 2 + div2 = 5 / 2 + query: data.test + want_result: + div1: 0.5 + div2: 2.5 + + - note: negative-number-arithmetic + data: {} + modules: + - | + package test + + neg1 = -1 + neg2 = -1 + 2 + neg3 = 0 - (2 + 3) + neg4 = 1 - -1 + query: data.test + want_result: + neg1: -1 + neg2: 1 + neg3: -5 + neg4: 2 + + - note: big-numbers + data: {} + modules: + - | + package test + + big1 = 1000000000000000000000 + 1 + big2 = 2 * 1000000000000000000000 + big3 = 2 / 1e18 + query: data.test + want_result: + big1: 1000000000000000000001 + big2: 2000000000000000000000 + big3: 2e-18