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:
+13
-2
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user