| Index: runtime/vm/object_test.cc
|
| ===================================================================
|
| --- runtime/vm/object_test.cc (revision 35933)
|
| +++ runtime/vm/object_test.cc (working copy)
|
| @@ -516,11 +516,18 @@
|
| const double dbl_const = 2.0;
|
| const Double& dbl1 = Double::Handle(Double::New(dbl_const));
|
| const Double& dbl2 = Double::Handle(Double::New(dbl_const));
|
| - EXPECT(dbl1.Equals(dbl2));
|
| + EXPECT(dbl1.OperatorEquals(dbl2));
|
| + EXPECT(dbl1.IsIdenticalTo(dbl2));
|
| + EXPECT(dbl1.CanonicalizeEquals(dbl2));
|
| const Double& dbl3 = Double::Handle(Double::New(3.3));
|
| - EXPECT(!dbl1.Equals(dbl3));
|
| - EXPECT(!dbl1.Equals(Smi::Handle(Smi::New(3))));
|
| - EXPECT(!dbl1.Equals(Double::Handle()));
|
| + EXPECT(!dbl1.OperatorEquals(dbl3));
|
| + EXPECT(!dbl1.OperatorEquals(Smi::Handle(Smi::New(3))));
|
| + EXPECT(!dbl1.OperatorEquals(Double::Handle()));
|
| + const Double& nan0 = Double::Handle(Double::New(NAN));
|
| + EXPECT(nan0.IsIdenticalTo(nan0));
|
| + EXPECT(nan0.CanonicalizeEquals(nan0));
|
| + EXPECT(!nan0.OperatorEquals(nan0));
|
| + // TODO(18738): Test bitwise different NaNs after agreement on spec.
|
| }
|
| {
|
| const String& dbl_str0 = String::Handle(String::New("bla"));
|
| @@ -1838,16 +1845,16 @@
|
| other_array.SetAt(0, array);
|
| other_array.SetAt(2, array);
|
|
|
| - EXPECT(array.Equals(array));
|
| - EXPECT(array.Equals(other_array));
|
| + EXPECT(array.CanonicalizeEquals(array));
|
| + EXPECT(array.CanonicalizeEquals(other_array));
|
|
|
| other_array.SetAt(1, other_array);
|
| - EXPECT(!array.Equals(other_array));
|
| + EXPECT(!array.CanonicalizeEquals(other_array));
|
|
|
| other_array = Array::New(kArrayLen - 1);
|
| other_array.SetAt(0, array);
|
| other_array.SetAt(2, array);
|
| - EXPECT(!array.Equals(other_array));
|
| + EXPECT(!array.CanonicalizeEquals(other_array));
|
|
|
| EXPECT_EQ(0, Object::empty_array().Length());
|
|
|
| @@ -4018,4 +4025,33 @@
|
| heap->IterateObjects(&verifier);
|
| }
|
|
|
| +
|
| +TEST_CASE(InstanceEquality) {
|
| + // Test that Instance::OperatorEquals can call a user-defined operator==.
|
| + const char* kScript =
|
| + "class A {\n"
|
| + " bool operator==(A other) { return true; }\n"
|
| + "}\n"
|
| + "main() {\n"
|
| + " A a = new A();\n"
|
| + "}";
|
| +
|
| + Dart_Handle h_lib = TestCase::LoadTestScript(kScript, NULL);
|
| + EXPECT_VALID(h_lib);
|
| + Library& lib = Library::Handle();
|
| + lib ^= Api::UnwrapHandle(h_lib);
|
| + EXPECT(!lib.IsNull());
|
| + Dart_Handle result = Dart_Invoke(h_lib, NewString("main"), 0, NULL);
|
| + EXPECT_VALID(result);
|
| + const Class& clazz = Class::Handle(GetClass(lib, "A"));
|
| + EXPECT(!clazz.IsNull());
|
| + const Instance& a0 = Instance::Handle(Instance::New(clazz));
|
| + const Instance& a1 = Instance::Handle(Instance::New(clazz));
|
| + EXPECT(a0.raw() != a1.raw());
|
| + EXPECT(a0.OperatorEquals(a0));
|
| + EXPECT(a0.OperatorEquals(a1));
|
| + EXPECT(a0.IsIdenticalTo(a0));
|
| + EXPECT(!a0.IsIdenticalTo(a1));
|
| +}
|
| +
|
| } // namespace dart
|
|
|