]> git.mdlowis.com Git - proto/cerise-c.git/commitdiff
fixed up operators and added tests
authorMichael D. Lowis <mike@mdlowis.com>
Thu, 20 Jun 2024 03:53:20 +0000 (23:53 -0400)
committerMichael D. Lowis <mike@mdlowis.com>
Thu, 20 Jun 2024 03:53:20 +0000 (23:53 -0400)
cerise-c.m
runtime/OpEq.c
runtime/OpGt.c
runtime/OpLt.c
runtime/OpLtEq.c
runtime/OpNeq.c

index e1b7fa71d912dac54dca63cbf9a319baf774b9c6..4f17ff8a60d938efc362139882037ae582f15bbf 100644 (file)
@@ -105,6 +105,38 @@ TestHashOps()
     assert hash["baz"] == "boo"
 }
 
+TestEqOps() {
+    assert ("" == "") == true
+    assert ("" == 1) == false
+    assert ("" == 1.0) == false
+    assert ("" == true) == false
+    assert ("" == false) == false
+    assert ("" == []) == false
+    assert ("" == {}) == false
+}
+
+TestNeqOps() {
+    assert ("" != "") == false
+    assert ("" != 1) == true
+    assert ("" != 1.0) == true
+    assert ("" != true) == true
+    assert ("" != false) == true
+    assert ("" != []) == true
+    assert ("" != {}) == true
+}
+
+TestLtOps(){
+}
+
+TestLtEqOps(){
+}
+
+TestGtOps(){
+}
+
+TestGtEqOps(){
+}
+
 Main()
 {
     TestLiterals()
@@ -114,5 +146,6 @@ Main()
     TestStringOps()
     TestArrayOps()
     TestHashOps()
-    return true
+    TestEqOps()
+    TestNeqOps()
 }
index 158b7b1da7f6f5d100c949ae0dc45cb71ac1f59e..60073574535b2ec128b016576e6ba9c0748ff0f5 100644 (file)
@@ -2,13 +2,13 @@
 
 Value OpEq(Value left, Value right) {
     Value result;
-    if (IsBool(left)) {
+    if (IsBool(left) && IsBool(right)) {
         result = MakeBool(ValueAsBool(left) == ValueAsBool(right));
-    } else if (IsInt(left)) {
+    } else if (IsInt(left) && IsInt(right)) {
         result = MakeBool(ValueAsInt(left) == ValueAsInt(right));
-    } else if (IsReal(left)) {
+    } else if (IsReal(left) && IsReal(right)) {
         result = MakeBool(ValueAsReal(left) == ValueAsReal(right));
-    } else if (IsString(left)) {
+    } else if (IsString(left) && IsString(right)) {
         result = MakeBool(!strcmp(ValueAsString(left)->bytes, ValueAsString(right)->bytes));
     } else {
         result = MakeBool(false);
index 5c26007576011e992a4cf1d0c406946fb8ab5bfb..f11f188c0202c4c480977129e2488d78d13bd974 100644 (file)
@@ -2,9 +2,9 @@
 
 Value OpGt(Value left, Value right) {
     Value result;
-    if (IsInt(left)) {
+    if (IsInt(left) && IsInt(right)) {
         result = MakeBool(ValueAsInt(left) > ValueAsInt(right));
-    } else if (IsReal(left)) {
+    } else if (IsReal(left) && IsReal(right)) {
         result = MakeBool(ValueAsReal(left) > ValueAsReal(right));
     } else {
         result = MakeBool(false);
index 30c6bbc47929d888b3a56e0e60aa32dd35e3f1fe..b36bab4f11a8ee6db2ac407f2aeb39534f3a5b2d 100644 (file)
@@ -2,9 +2,9 @@
 
 Value OpLt(Value left, Value right) {
     Value result;
-    if (IsInt(left)) {
+    if (IsInt(left) && IsInt(right)) {
         result = MakeBool(ValueAsInt(left) < ValueAsInt(right));
-    } else if (IsReal(left)) {
+    } else if (IsReal(left) && IsReal(right)) {
         result = MakeBool(ValueAsReal(left) < ValueAsReal(right));
     } else {
         result = MakeBool(false);
index 862f203751d4f74e66596bfcbb90b10e2c1cbdd3..5a2e8a5bc2c8e0054c5b6b5645c6ae2c33a95d21 100644 (file)
@@ -2,9 +2,9 @@
 
 Value OpLtEq(Value left, Value right) {
     Value result;
-    if (IsInt(left)) {
+    if (IsInt(left) && IsInt(right)) {
         result = MakeBool(ValueAsInt(left) <= ValueAsInt(right));
-    } else if (IsReal(left)) {
+    } else if (IsReal(left) && IsReal(right)) {
         result = MakeBool(ValueAsReal(left) <= ValueAsReal(right));
     } else {
         result = MakeBool(false);
index d2e72bed2762e49c3d13ad061e859dd8f9710e7e..f7bd8d0b804143d0576c155101b37ee4e029727f 100644 (file)
@@ -2,16 +2,16 @@
 
 Value OpNeq(Value left, Value right) {
     Value result;
-    if (IsBool(left)) {
+    if (IsBool(left) && IsBool(right)) {
         result = MakeBool(ValueAsBool(left) != ValueAsBool(right));
-    } else if (IsInt(left)) {
+    } else if (IsInt(left) && IsInt(right)) {
         result = MakeBool(ValueAsInt(left) != ValueAsInt(right));
-    } else if (IsReal(left)) {
+    } else if (IsReal(left) && IsReal(right)) {
         result = MakeBool(ValueAsReal(left) != ValueAsReal(right));
-    } else if (IsString(left)) {
+    } else if (IsString(left) && IsString(right)) {
         result = MakeBool(0 != strcmp(ValueAsString(left)->bytes, ValueAsString(right)->bytes));
     } else {
-        result = MakeBool(false);
+        result = MakeBool(true);
     }
     return result;
 }