feat: add == and != operators to Range class with equality tests

Implement equality comparison for Range objects by defining `range_eqeq` and `range_bangeq` native methods that delegate to `wrenValuesEqual`. Register both operators on the Range class in `wrenInitializeCore` and add a comprehensive test suite in `test/range/equality.wren` covering inclusive/exclusive ranges and cross-type inequality checks.
This commit is contained in:
Gavin Schulz
2015-01-26 03:50:54 +00:00
parent f1d2f2f9c1
commit b0b3256335
2 changed files with 30 additions and 2 deletions
+13 -2
View File
@@ -798,7 +798,7 @@ DEF_NATIVE(map_iterate)
DEF_NATIVE(map_remove)
{
if (!validateKey(vm, args, 1)) return PRIM_ERROR;
RETURN_VAL(wrenMapRemoveKey(vm, AS_MAP(args[0]), args[1]));
}
@@ -1073,6 +1073,16 @@ DEF_NATIVE(object_instantiate)
RETURN_ERROR("Must provide a class to 'new' to construct.");
}
DEF_NATIVE(range_eqeq)
{
RETURN_BOOL(wrenValuesEqual(args[0], args[1]));
}
DEF_NATIVE(range_bangeq)
{
RETURN_BOOL(!wrenValuesEqual(args[0], args[1]));
}
DEF_NATIVE(range_from)
{
ObjRange* range = AS_RANGE(args[0]);
@@ -1508,7 +1518,8 @@ void wrenInitializeCore(WrenVM* vm)
// TODO: More map methods.
vm->rangeClass = AS_CLASS(findGlobal(vm, "Range"));
// TODO: == operator.
NATIVE(vm->rangeClass, "== ", range_eqeq);
NATIVE(vm->rangeClass, "!= ", range_bangeq);
NATIVE(vm->rangeClass, "from", range_from);
NATIVE(vm->rangeClass, "to", range_to);
NATIVE(vm->rangeClass, "min", range_min);