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()
TestStringOps()
TestArrayOps()
TestHashOps()
- return true
+ TestEqOps()
+ TestNeqOps()
}
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);
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);
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);
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);
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;
}