Index: dart/compiler/javatests/com/google/dart/compiler/common/NameFactoryTest.java |
diff --git a/dart/compiler/javatests/com/google/dart/compiler/common/NameFactoryTest.java b/dart/compiler/javatests/com/google/dart/compiler/common/NameFactoryTest.java |
deleted file mode 100644 |
index 69239b71cde69ace5ef9943a404368af56ba6fe2..0000000000000000000000000000000000000000 |
--- a/dart/compiler/javatests/com/google/dart/compiler/common/NameFactoryTest.java |
+++ /dev/null |
@@ -1,127 +0,0 @@ |
-// Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file |
-// for details. All rights reserved. Use of this source code is governed by a |
-// BSD-style license that can be found in the LICENSE file. |
- |
-package com.google.dart.compiler.common; |
- |
-import java.lang.ref.WeakReference; |
-import java.util.concurrent.CountDownLatch; |
-import java.util.concurrent.CyclicBarrier; |
- |
-public class NameFactoryTest extends NameTestCase { |
- private static final int NUM_RETRIES = 50; |
- private static final int NUM_THREADS = 10; |
- |
- private NameFactory factory; |
- |
- @Override |
- protected void tearDown() { |
- factory = null; |
- } |
- |
- /** |
- * I'm told this can be made to work, but it's flaky for me. |
- */ |
- public void disabledTestGc() { |
- factory = new NameFactory(); |
- insertDefaultNames(); |
- System.gc(); |
- System.gc(); |
- System.gc(); |
- System.gc(); |
- factory.cleanUp(); |
- assertEquals(0, factory.numEntries()); |
- } |
- |
- public void testContention() throws Throwable { |
- // Run many times to try to trip a concurreny problem. |
- for (int r = 0; r < NUM_RETRIES; ++r) { |
- factory = new NameFactory(); |
- Name[] names = new Name[NUM_INPUTS]; |
- for (int i = 0; i < NUM_INPUTS; ++i) { |
- assertEquals(i, factory.numEntries()); |
- names[i] = testContentionFor(INPUTS[i]); |
- assertEquals(i + 1, factory.numEntries()); |
- } |
- } |
- } |
- |
- public void testCreation() { |
- factory = new NameFactory(); |
- Name[] names = insertDefaultNames(); |
- // Check that the same names come back. |
- for (int i = 0; i < NUM_INPUTS; ++i) { |
- assertEquals(NUM_INPUTS, factory.numEntries()); |
- Name newName = factory.of(INPUTS[i]); |
- assertEquals(names[i], newName); |
- assertSame(names[i], newName); |
- assertEquals(NUM_INPUTS, factory.numEntries()); |
- } |
- } |
- |
- public void testRemoval() { |
- factory = new NameFactory(); |
- Name[] names = insertDefaultNames(); |
- // Simulate GC removal. |
- for (int i = NUM_INPUTS; i > 0; --i) { |
- assertEquals(i, factory.numEntries()); |
- WeakReference<Name> ref = factory.getRefFor(names[NUM_INPUTS - i]); |
- ref.clear(); |
- ref.enqueue(); |
- factory.cleanUp(); |
- assertEquals(i - 1, factory.numEntries()); |
- } |
- // Check that different names come back. |
- for (int i = 0; i < NUM_INPUTS; ++i) { |
- assertEquals(i, factory.numEntries()); |
- Name newName = factory.of(INPUTS[i]); |
- assertNotSame(names[i], newName); |
- assertNotEquals(names[i], newName); |
- assertEquals(i + 1, factory.numEntries()); |
- } |
- } |
- |
- private Name[] insertDefaultNames() { |
- Name[] names = new Name[NUM_INPUTS]; |
- for (int i = 0; i < NUM_INPUTS; ++i) { |
- assertEquals(i, factory.numEntries()); |
- names[i] = factory.of(INPUTS[i]); |
- assertEquals(i + 1, factory.numEntries()); |
- } |
- return names; |
- } |
- |
- private Name testContentionFor(final char[] data) throws Throwable { |
- final CyclicBarrier barrier = new CyclicBarrier(NUM_THREADS); |
- final CountDownLatch countDown = new CountDownLatch(NUM_THREADS); |
- final Object[] results = new Name[NUM_THREADS]; |
- for (int i = 0; i < NUM_THREADS; ++i) { |
- final int id = i; |
- new Thread() { |
- public void run() { |
- try { |
- barrier.await(); |
- results[id] = factory.of(data); |
- } catch (Throwable e) { |
- results[id] = e; |
- } finally { |
- countDown.countDown(); |
- } |
- } |
- }.start(); |
- } |
- countDown.await(); |
- Name expected = factory.of(data); |
- for (int i = 0; i < NUM_THREADS; ++i) { |
- Object result = results[i]; |
- if (result == null) { |
- throw new NullPointerException("Missing results from " + i); |
- } else if (results[i] instanceof Throwable) { |
- throw (Throwable) results[i]; |
- } else { |
- assertSame(expected, results[i]); |
- } |
- } |
- return expected; |
- } |
-} |