From f482a53d0ebefc0ddfc68172ea27a10d1fd370bf Mon Sep 17 00:00:00 2001 From: Gavin Schulz Date: Sun, 25 Jan 2015 19:50:54 -0800 Subject: [PATCH] Define equality on ranges. --- src/wren_core.c | 15 +++++++++++++-- test/range/equality.wren | 17 +++++++++++++++++ 2 files changed, 30 insertions(+), 2 deletions(-) create mode 100644 test/range/equality.wren diff --git a/src/wren_core.c b/src/wren_core.c index 180fef31..f1d0fdf6 100644 --- a/src/wren_core.c +++ b/src/wren_core.c @@ -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); diff --git a/test/range/equality.wren b/test/range/equality.wren new file mode 100644 index 00000000..a2e23d30 --- /dev/null +++ b/test/range/equality.wren @@ -0,0 +1,17 @@ +var a = 2..5 +var b = 2..6 +var c = 2...5 +var d = 2...6 + +IO.print(a == 2..5) // expect: true +IO.print(a == 2..6) // expect: false +IO.print(c == 2...5) // expect: true +IO.print(c == 2...6) // expect: false + +IO.print(b != 2..5) // expect: true +IO.print(b != 2..6) // expect: false +IO.print(d != 2...5) // expect: true +IO.print(d != 2...6) // expect: false + +IO.print(a != c) // expect: true +IO.print(b != d) // expect: true \ No newline at end of file