package com.scaleunlimited.maps; import static junit.framework.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.InputStream; import java.io.OutputStream; import org.junit.Test; public class StringSetTest { @Test public void test() { StringSet ss = new StringSet(); assertFalse(ss.contains("test")); assertTrue(ss.add("test")); assertTrue(ss.contains("test")); assertFalse(ss.add("test")); ss.clear(); assertFalse(ss.contains("test")); } @Test public void testBigData() { StringSet ss = new StringSet(); for (int i = 0; i < 1000000; i++) { String s = "test-" + i; assertFalse(ss.contains(s)); assertTrue(ss.add(s)); assertTrue(ss.contains(s)); assertFalse(ss.add(s)); } System.out.println("Set size is: " + ss.size()); for (int i = 0; i < 1000000; i++) { String s = "test-" + i; assertTrue(ss.contains(s)); } } @Test public void testCollisionSet() { StringSet ss = new StringSet(true); final int numKeys = 1000; for (int i = 0; i < numKeys; i++) { String s = "test-" + i; assertFalse(ss.contains(s)); assertTrue(ss.add(s)); assertTrue(ss.contains(s)); assertFalse(ss.add(s)); } System.out.println("Set size is: " + ss.size()); for (int i = 0; i < numKeys; i++) { String s = "test-" + i; assertTrue(ss.contains(s)); } } @Test public void testSmallSerialization() throws Exception { StringSet ss = new StringSet(); ss.add("key"); File dir = new File("build/test/StringSetTest/testSmallSerialization/"); dir.mkdirs(); File file = new File(dir, "string.set"); file.delete(); OutputStream os = new FileOutputStream(file); DataOutputStream out = new DataOutputStream(os); ss.write(out); out.close(); StringSet ss2 = new StringSet(); InputStream is = new FileInputStream(file); DataInputStream in = new DataInputStream(is); ss2.readFields(in); assertEquals(1, ss2.size()); assertTrue(ss2.contains("key")); } @Test public void testBigSerialization() throws Exception { StringSet ss = new StringSet(); final int numKeys = 1000000; for (int i = 0; i < numKeys; i++) { String s = "test-" + i; assertFalse(ss.contains(s)); assertTrue(ss.add(s)); assertTrue(ss.contains(s)); assertFalse(ss.add(s)); } File dir = new File("build/test/StringSetTest/testBigSerialization/"); dir.mkdirs(); File file = new File(dir, "string.set"); file.delete(); OutputStream os = new FileOutputStream(file); DataOutputStream out = new DataOutputStream(os); ss.write(out); out.close(); StringSet ss2 = new StringSet(); InputStream is = new FileInputStream(file); DataInputStream in = new DataInputStream(is); ss2.readFields(in); assertEquals(numKeys, ss2.size()); for (int i = 0; i < numKeys; i++) { String s = "test-" + i; assertTrue(ss2.contains(s)); } } @Test public void testCollisionSerialization() throws Exception { StringSet ss = new StringSet(true); final int numKeys = 1000; for (int i = 0; i < numKeys; i++) { String s = "test-" + i; assertFalse(ss.contains(s)); assertTrue(ss.add(s)); assertTrue(ss.contains(s)); assertFalse(ss.add(s)); } File dir = new File("build/test/StringSetTest/testCollisionSerialization/"); dir.mkdirs(); File file = new File(dir, "string.set"); file.delete(); OutputStream os = new FileOutputStream(file); DataOutputStream out = new DataOutputStream(os); ss.write(out); out.close(); StringSet ss2 = new StringSet(); InputStream is = new FileInputStream(file); DataInputStream in = new DataInputStream(is); ss2.readFields(in); assertEquals(numKeys, ss2.size()); for (int i = 0; i < numKeys; i++) { String s = "test-" + i; assertTrue(ss2.contains(s)); } } @Test public void testRemovingEntry() throws Exception { StringSet ss = new StringSet(); assertTrue(ss.add("key")); assertTrue(ss.remove("key")); assertFalse(ss.remove("key")); assertFalse(ss.contains("key")); File dir = new File("build/test/StringSetTest/testRemovingEntry/"); dir.mkdirs(); File file = new File(dir, "string.set"); file.delete(); OutputStream os = new FileOutputStream(file); DataOutputStream out = new DataOutputStream(os); ss.write(out); out.close(); StringSet ss2 = new StringSet(); InputStream is = new FileInputStream(file); DataInputStream in = new DataInputStream(is); ss2.readFields(in); assertEquals(0, ss2.size()); assertFalse(ss2.contains("key")); } }