Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1046)

Unified Diff: runtime/vm/object_test.cc

Issue 274333002: Instance equality (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: Created 6 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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
« runtime/vm/object.h ('K') | « runtime/vm/object.cc ('k') | runtime/vm/snapshot_test.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698