package com.indeed.flamdex.utils;
import com.indeed.flamdex.reader.MockFlamdexReader;
import com.indeed.util.core.threads.ThreadSafeBitSet;
import junit.framework.Assert;
import junit.framework.TestCase;
import java.util.Arrays;
import java.util.Collections;
public class FlamdexUtilsTest extends TestCase {
public void testCacheRegexIntField() throws Exception {
final MockFlamdexReader reader = new MockFlamdexReader(Arrays.asList("fieldname"), Collections.<String>emptySet(), Collections.<String>emptySet(), 10);
reader.addIntTerm("fieldname", 0, 3);
reader.addIntTerm("fieldname", 151, 0, 1, 2);
reader.addIntTerm("fieldname", 283, 3, 5);
reader.addIntTerm("fieldname", 3551, 4, 6, 8);
reader.addIntTerm("fieldname", 40005, 7, 9);
final ThreadSafeBitSet bitSet = FlamdexUtils.cacheRegex("fieldname", ".+5.+", reader);
final ThreadSafeBitSet expected = new ThreadSafeBitSet(10);
expected.set(0);
expected.set(1);
expected.set(2);
expected.set(4);
expected.set(6);
expected.set(8);
assertBitsetEquality(expected, bitSet);
}
public void testCacheRegexStringField() throws Exception {
final MockFlamdexReader reader = new MockFlamdexReader(Collections.<String>emptySet(), Arrays.asList("fieldname"), Collections.<String>emptySet(), 10);
reader.addStringTerm("fieldname", "0", 3);
reader.addStringTerm("fieldname", "151", 0, 1, 2);
reader.addStringTerm("fieldname", "283", 3, 5);
reader.addStringTerm("fieldname", "3551", 4, 6, 8);
reader.addStringTerm("fieldname", "40005", 7, 9);
final ThreadSafeBitSet bitSet = FlamdexUtils.cacheRegex("fieldname", ".+5.+", reader);
final ThreadSafeBitSet expected = new ThreadSafeBitSet(10);
expected.set(0);
expected.set(1);
expected.set(2);
expected.set(4);
expected.set(6);
expected.set(8);
assertBitsetEquality(expected, bitSet);
}
public void testCacheRegexNoField() throws Exception {
final MockFlamdexReader reader = new MockFlamdexReader(Collections.<String>emptySet(), Collections.<String>emptySet(), Collections.<String>emptySet(), 50);
final ThreadSafeBitSet bitSet = FlamdexUtils.cacheRegex("fieldname", ".+5.+", reader);
final ThreadSafeBitSet expected = new ThreadSafeBitSet(50);
assertBitsetEquality(expected, bitSet);
}
public void testCacheRegexEmptyStringField() throws Exception {
final MockFlamdexReader reader = new MockFlamdexReader(Collections.<String>emptySet(), Arrays.asList("fieldname"), Collections.<String>emptySet(), 50);
final ThreadSafeBitSet bitSet = FlamdexUtils.cacheRegex("fieldname", ".+5.+", reader);
final ThreadSafeBitSet expected = new ThreadSafeBitSet(50);
assertBitsetEquality(expected, bitSet);
}
public void testCacheRegexEmptyIntField() throws Exception {
final MockFlamdexReader reader = new MockFlamdexReader(Arrays.asList("fieldname"), Collections.<String>emptySet(), Collections.<String>emptySet(), 50);
final ThreadSafeBitSet bitSet = FlamdexUtils.cacheRegex("fieldname", ".+5.+", reader);
final ThreadSafeBitSet expected = new ThreadSafeBitSet(50);
assertBitsetEquality(expected, bitSet);
}
private void assertBitsetEquality(ThreadSafeBitSet expected, ThreadSafeBitSet bitSet) {
// Why can't I just assertEquals on a ThreadSafeBitSet?
Assert.assertEquals(expected.size(), bitSet.size());
Assert.assertEquals(expected.cardinality(), bitSet.cardinality());
final ThreadSafeBitSet expectedCopy = new ThreadSafeBitSet(expected.size());
expectedCopy.or(expected);
expectedCopy.and(bitSet);
Assert.assertEquals("post-AND cardinality mismatch", expectedCopy.cardinality(), bitSet.cardinality());
}
}