| package com.googlecode.aviator.utils; |
| |
| import java.util.concurrent.CyclicBarrier; |
| |
| import org.junit.Before; |
| import org.junit.Test; |
| |
| import static org.junit.Assert.*; |
| |
| |
| public class SyncLRUMapUnitTest { |
| |
| private SyncLRUMap<Integer, Integer> map; |
| |
| |
| @Before |
| public void setUp() { |
| this.map = new SyncLRUMap<Integer, Integer>(10); |
| } |
| |
| |
| @Test |
| public void testPutGet() { |
| assertTrue(map.isEmpty()); |
| assertEquals(0, map.size()); |
| for (int i = 0; i < 5; i++) { |
| assertNull(this.map.get(i)); |
| this.map.put(i, i); |
| assertEquals(i, this.map.get(i)); |
| } |
| assertEquals(5, map.size()); |
| } |
| |
| |
| @Test |
| public void testLRU() { |
| for (int i = 0; i < 20; i++) { |
| assertNull(this.map.get(i)); |
| this.map.put(i, i); |
| assertEquals(i, this.map.get(i)); |
| } |
| assertEquals(10, map.size()); |
| for (int i = 0; i < 10; i++) |
| assertNull(this.map.get(0)); |
| for (int i = 10; i < 11; i++) |
| assertEquals(i, this.map.get(i)); |
| assertEquals(10, map.size()); |
| |
| } |
| |
| |
| @Test |
| public void concurrentTest() throws Exception { |
| int threads = 100; |
| final CyclicBarrier barrier = new CyclicBarrier(threads + 1); |
| for (int i = 0; i < threads; i++) { |
| new Thread() { |
| public void run() { |
| try { |
| barrier.await(); |
| for (int i = 0; i < 10000; i++) |
| map.put(i, i); |
| for (int i = 0; i < 10000; i++) |
| map.get(i); |
| barrier.await(); |
| } |
| catch (Exception e) { |
| e.printStackTrace(); |
| } |
| } |
| }.start(); |
| } |
| barrier.await(); |
| barrier.await(); |
| assertEquals(10, map.size()); |
| System.out.println(map); |
| } |
| } |