Index: test/mjsunit/compare-objects-fast.js |
diff --git a/test/mjsunit/compare-known-objects-slow.js b/test/mjsunit/compare-objects-fast.js |
similarity index 62% |
copy from test/mjsunit/compare-known-objects-slow.js |
copy to test/mjsunit/compare-objects-fast.js |
index afa198fcb352ea7f186a285146a61fd1ab70d51b..e7cb25fb66664cff868ceb821fe67d0556535b6d 100644 |
--- a/test/mjsunit/compare-known-objects-slow.js |
+++ b/test/mjsunit/compare-objects-fast.js |
@@ -31,6 +31,14 @@ |
// objects in slow mode. These objects share the same map even though they |
Hannes Payer (out of office)
2013/10/02 13:33:19
in fast mode?
|
// might have completely different properties. |
+function lt(a, b) { |
+ return a < b; |
+} |
+ |
+function gt(a, b) { |
+ return a > b; |
+} |
+ |
function eq(a, b) { |
return a == b; |
} |
@@ -39,31 +47,63 @@ function eq_strict(a, b) { |
return a === b; |
} |
-function test(a, b) { |
+function test(a, b, less, greater) { |
// Check CompareIC for equality of known objects. |
assertTrue(eq(a, a)); |
assertTrue(eq(b, b)); |
assertFalse(eq(a, b)); |
- // Check CompareIC for strict equality of known objects. |
assertTrue(eq_strict(a, a)); |
assertTrue(eq_strict(b, b)); |
assertFalse(eq_strict(a, b)); |
+ assertEquals(lt(a, b), less); |
+ assertEquals(gt(a, b), greater); |
+ assertEquals(lt(b, a), greater); |
+ assertEquals(gt(b, a), less); |
} |
-// Prepare two objects in slow mode that have the same map. |
-var obj1 = %OptimizeObjectForAddingMultipleProperties({}, 1); |
-var obj2 = %OptimizeObjectForAddingMultipleProperties({}, 1); |
+var obj1 = {toString: function() {return "1";}}; |
+var obj2 = {toString: function() {return "2";}}; |
+ |
+var less = obj1 < obj2; |
+var greater = obj1 > obj2; |
-// Test original objects. |
-assertTrue(%HaveSameMap(obj1, obj2)); |
-test(obj1, obj2); |
+test(obj1, obj2, less, greater); |
+test(obj1, obj2, less, greater); |
+test(obj1, obj2, less, greater); |
+%OptimizeFunctionOnNextCall(test); |
+test(obj1, obj2, less, greater); |
+test(obj1, obj2, less, greater); |
-// Test after adding property to first object. |
obj1.x = 1; |
-assertTrue(%HaveSameMap(obj1, obj2)); |
-test(obj1, obj2); |
+test(obj1, obj2, less, greater); |
+ |
+obj2.y = 2; |
+test(obj1, obj2, less, greater); |
+ |
+var obj1 = {test: 3}; |
+var obj2 = {test2: 3}; |
+ |
+var less = obj1 < obj2; |
+var greater = obj1 > obj2; |
+ |
+test(obj1, obj2, less, greater); |
+test(obj1, obj2, less, greater); |
+test(obj1, obj2, less, greater); |
+%OptimizeFunctionOnNextCall(test); |
+test(obj1, obj2, less, greater); |
+test(obj1, obj2, less, greater); |
+ |
+obj1.toString = function() {return "1"}; |
+var less = obj1 < obj2; |
+var greater = obj1 > obj2; |
+test(obj1, obj2, less, greater); |
+%OptimizeFunctionOnNextCall(test); |
+test(obj1, obj2, less, greater); |
+ |
+obj2.toString = function() {return "2"}; |
+var less = true; |
+var greater = false; |
-// Test after adding property to second object. |
+test(obj1, obj2, less, greater); |
obj2.y = 2; |
-assertTrue(%HaveSameMap(obj1, obj2)); |
-test(obj1, obj2); |
+test(obj1, obj2, less, greater); |