summaryrefslogtreecommitdiff
path: root/deps/v8/test/mjsunit/harmony/weakrefs/two-weakrefs.js
diff options
context:
space:
mode:
Diffstat (limited to 'deps/v8/test/mjsunit/harmony/weakrefs/two-weakrefs.js')
-rw-r--r--deps/v8/test/mjsunit/harmony/weakrefs/two-weakrefs.js48
1 files changed, 48 insertions, 0 deletions
diff --git a/deps/v8/test/mjsunit/harmony/weakrefs/two-weakrefs.js b/deps/v8/test/mjsunit/harmony/weakrefs/two-weakrefs.js
new file mode 100644
index 0000000000..c3fc9f741c
--- /dev/null
+++ b/deps/v8/test/mjsunit/harmony/weakrefs/two-weakrefs.js
@@ -0,0 +1,48 @@
+// Copyright 2018 the V8 project authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Flags: --harmony-weak-refs --expose-gc --noincremental-marking --allow-natives-syntax
+
+let o1 = {};
+let o2 = {};
+let wr1;
+let wr2;
+(function() {
+ wr1 = new WeakRef(o1);
+ wr2 = new WeakRef(o2);
+})();
+
+// Since the WeakRefs were created during this turn, they're not cleared by GC.
+gc();
+
+(function() {
+ assertNotEquals(undefined, wr1.deref());
+ assertNotEquals(undefined, wr2.deref());
+})();
+
+%PerformMicrotaskCheckpoint();
+// New turn.
+
+wr1.deref();
+o1 = null;
+gc(); // deref makes sure we don't clean up wr1
+
+%PerformMicrotaskCheckpoint();
+// New turn.
+
+wr2.deref();
+o2 = null;
+gc(); // deref makes sure we don't clean up wr2
+
+%PerformMicrotaskCheckpoint();
+// New turn.
+
+assertEquals(undefined, wr1.deref());
+
+gc();
+
+%PerformMicrotaskCheckpoint();
+// New turn.
+
+assertEquals(undefined, wr2.deref());