// This software is released into the Public Domain. See copying.txt for details.
package org.openstreetmap.osmosis.core.filter.common;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
import org.junit.After;
import org.junit.Before;
import org.junit.Ignore;
import org.junit.Test;
/**
* Tests an id tracker implementation. Sub-classes provide the actual implementation to be tested.
*/
public abstract class IdTrackerBase {
private static final int TEST_VAL_1 = -100;
private static final int TEST_VAL_2 = 0;
private static final int TEST_VAL_3 = 100;
private static final int TEST_VAL_4 = 10000;
private static final int TEST_VAL_5 = 10000;
private IdTracker idt;
/**
* Performs pre-test activities.
*/
@Before
public final void setUp() {
idt = getImplementation();
}
/**
* Performs post-test activities.
*/
@After
public final void tearDown() {
idt = null;
}
/**
* Gets an object which implements the interface under test.
*
* @return The implementation of this interface to test.
*/
protected abstract IdTracker getImplementation();
/**
* Simple test of a single value.
*/
@Test
public final void testSet1() {
idt.set(TEST_VAL_1);
assertTrue(idt.get(TEST_VAL_1));
}
/**
* Test three values, added in order of increasing value.
*/
@Test
public final void testSet2() {
idt.set(TEST_VAL_1);
idt.set(TEST_VAL_2);
idt.set(TEST_VAL_3);
idt.set(TEST_VAL_4);
idt.set(TEST_VAL_5);
assertTrue(idt.get(TEST_VAL_1));
assertTrue(idt.get(TEST_VAL_2));
assertTrue(idt.get(TEST_VAL_3));
assertTrue(idt.get(TEST_VAL_4));
assertTrue(idt.get(TEST_VAL_5));
}
/**
* Test three values, added in order of decreasing value.
*/
@Test
public final void testSet3() {
idt.set(TEST_VAL_5);
idt.set(TEST_VAL_4);
idt.set(TEST_VAL_3);
idt.set(TEST_VAL_2);
idt.set(TEST_VAL_1);
assertTrue(idt.get(TEST_VAL_1));
assertTrue(idt.get(TEST_VAL_2));
assertTrue(idt.get(TEST_VAL_3));
assertTrue(idt.get(TEST_VAL_4));
assertTrue(idt.get(TEST_VAL_5));
}
/**
* Test three values, added in random (not sorted) order.
*/
@Test
public final void testSet4() {
idt.set(TEST_VAL_2);
idt.set(TEST_VAL_5);
idt.set(TEST_VAL_3);
idt.set(TEST_VAL_4);
idt.set(TEST_VAL_1);
assertTrue(idt.get(TEST_VAL_1));
assertTrue(idt.get(TEST_VAL_2));
assertTrue(idt.get(TEST_VAL_3));
assertTrue(idt.get(TEST_VAL_4));
assertTrue(idt.get(TEST_VAL_5));
}
/**
* Test duplicate values added.
*/
@Test
public final void testSet5() {
idt.set(TEST_VAL_1);
idt.set(TEST_VAL_2);
idt.set(TEST_VAL_3);
idt.set(TEST_VAL_4);
idt.set(TEST_VAL_5);
idt.set(TEST_VAL_1);
assertTrue(idt.get(TEST_VAL_1));
assertTrue(idt.get(TEST_VAL_2));
assertTrue(idt.get(TEST_VAL_3));
assertTrue(idt.get(TEST_VAL_4));
assertTrue(idt.get(TEST_VAL_5));
}
/**
* Test set after get.
*/
@Test
public final void testSet6() {
idt.set(TEST_VAL_2);
assertTrue(idt.get(TEST_VAL_2));
idt.set(TEST_VAL_1);
idt.set(TEST_VAL_3);
idt.set(TEST_VAL_4);
idt.set(TEST_VAL_5);
assertTrue(idt.get(TEST_VAL_1));
assertTrue(idt.get(TEST_VAL_2));
assertTrue(idt.get(TEST_VAL_3));
assertTrue(idt.get(TEST_VAL_4));
assertTrue(idt.get(TEST_VAL_5));
}
/**
* Test a large number of values added to trigger a growth in the list size.
*/
@Test
public final void testSet7() {
final int listSize = 1024;
for (int i = listSize - 1; i >= 0; i--) {
idt.set(i);
}
// This one should trigger the list growth
idt.set(TEST_VAL_3);
assertTrue(idt.get(TEST_VAL_3));
for (int i = 0; i < listSize; i++) {
assertTrue(idt.get(i));
}
}
/**
* Tests the setAll method of the id tracker.
*/
@Ignore
@Test
public final void testSetAll() {
fail("Not yet implemented"); // TODO
}
}