|
|
@@ -1,350 +0,0 @@
|
|
|
-package net.ranides.assira.collection.quotient;
|
|
|
-
|
|
|
-import net.ranides.assira.collection.iterators.IteratorUtils;
|
|
|
-import org.junit.Test;
|
|
|
-
|
|
|
-import java.util.AbstractMap.SimpleEntry;
|
|
|
-import java.util.*;
|
|
|
-
|
|
|
-import static net.ranides.assira.collection.quotient.QuotientMapHelper.*;
|
|
|
-import static org.junit.Assert.*;
|
|
|
-
|
|
|
-public class QuotientTreeMapTest {
|
|
|
-
|
|
|
- private QuotientMap<String, Integer> makeMap() {
|
|
|
- return fill(new QuotientTreeMap<>(CMP));
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
- @Test
|
|
|
- public void create() {
|
|
|
- QuotientMap<String, Integer> map = makeMap();
|
|
|
-// print(map);
|
|
|
-
|
|
|
- assertEquals(NODES, zip(map.entrySet()).toString());
|
|
|
- assertEquals(20, IteratorUtils.size(map.quotientEntrySet().iterator()));
|
|
|
- assertEquals(20, map.quotientEntrySet().size());
|
|
|
- assertEquals(20, map.size());
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
- @Test
|
|
|
- public void find() {
|
|
|
- QuotientMap<String, Integer> map = makeMap();
|
|
|
-
|
|
|
- assertNull(map.get("1:5:10"));
|
|
|
- assertEquals(1513, map.get("1:5:15").intValue());
|
|
|
- assertEquals(1554, map.get("1:5:54").intValue());
|
|
|
- assertEquals(1572, map.get("1:5:99").intValue());
|
|
|
- assertNull(map.get("2:6:12"));
|
|
|
- assertEquals(2622, map.get("2:6:22").intValue());
|
|
|
- assertEquals(2622, map.get("2:6:30").intValue());
|
|
|
-
|
|
|
- assertNull(map.find("1:5:10"));
|
|
|
- assertEquals(1513, map.find("1:5:15").getValue().intValue());
|
|
|
- assertEquals(1554, map.find("1:5:54").getValue().intValue());
|
|
|
- assertEquals(1572, map.find("1:5:99").getValue().intValue());
|
|
|
- assertNull(map.find("2:6:12"));
|
|
|
- assertEquals(2622, map.find("2:6:22").getValue().intValue());
|
|
|
- assertEquals(2622, map.find("2:6:30").getValue().intValue());
|
|
|
- }
|
|
|
-
|
|
|
- @Test
|
|
|
- public void findExact() {
|
|
|
- QuotientMap<String, Integer> map = makeMap();
|
|
|
-
|
|
|
- assertNull(map.findExact("1:5:10"));
|
|
|
- assertNull(map.findExact("1:5:15"));
|
|
|
- assertEquals(1554, map.findExact("1:5:54").getValue().intValue());
|
|
|
- assertNull(map.findExact("1:5:99"));
|
|
|
- assertNull(map.findExact("2:6:12"));
|
|
|
- assertEquals(2622, map.findExact("2:6:22").getValue().intValue());
|
|
|
- assertNull(map.findExact("2:6:30"));
|
|
|
-
|
|
|
- assertEquals(4, map.findAll("1:5:99").size());
|
|
|
- assertEquals(2, map.findAll("1:5:54").size());
|
|
|
- assertEquals(1, map.findAll("1:5:13").size());
|
|
|
- assertEquals(0, map.findAll("1:5:00").size());
|
|
|
- assertEquals(7, map.findAll("6:4:42").size());
|
|
|
- assertEquals(4, map.findAll("6:4:20").size());
|
|
|
- assertEquals(0, map.findAll("7:3:10").size());
|
|
|
-
|
|
|
- assertEquals("[{1:5:13=1513}, {1:5:54=1554}, {1:5:61=1561}, {1:5:72=1572}]", zip(map.findAll("1:5:99")).toString());
|
|
|
- assertEquals("[{1:5:13=1513}, {1:5:54=1554}]", zip(map.findAll("1:5:54")).toString());
|
|
|
- assertEquals("[{1:5:13=1513}]", zip(map.findAll("1:5:13")).toString());
|
|
|
- assertEquals("[]", zip(map.findAll("1:5:00")).toString());
|
|
|
- assertEquals("[{6:4:11=6411}, {6:4:12=6412}, {6:4:15=6415}, {6:4:20=6420}, {6:4:24=6424}, {6:4:30=6430}, {6:4:42=6442}]", zip(map.findAll("6:4:42")).toString());
|
|
|
- assertEquals("[{6:4:11=6411}, {6:4:12=6412}, {6:4:15=6415}, {6:4:20=6420}]", zip(map.findAll("6:4:20")).toString());
|
|
|
- assertEquals("[]", zip(map.findAll("7:3:10")).toString());
|
|
|
- }
|
|
|
-
|
|
|
- @Test
|
|
|
- public void findAll_unique() {
|
|
|
- QuotientMap<String, Integer> map = makeMap();
|
|
|
-
|
|
|
- String nodes5s4 = "[{1:5:13=1513}, {1:5:54=1554}, {1:5:61=1561}, {1:5:72=1572}]";
|
|
|
- String nodes5s2 = "[{1:5:13=1513}, {1:5:54=1554}]";
|
|
|
- String nodes5s1 = "[{1:5:13=1513}]";
|
|
|
- String nodes5s0 = "[]";
|
|
|
-
|
|
|
- String nodes6s7 = "[{6:4:11=6411}, {6:4:12=6412}, {6:4:15=6415}, {6:4:20=6420}, {6:4:24=6424}, {6:4:30=6430}, {6:4:42=6442}]";
|
|
|
- String nodes6s4 = "[{6:4:11=6411}, {6:4:12=6412}, {6:4:15=6415}, {6:4:20=6420}]";
|
|
|
- String nodes6s0 = "[]";
|
|
|
-
|
|
|
- assertEquals(4, map.findAll("1:5:99").size());
|
|
|
- assertEquals(2, map.findAll("1:5:54").size());
|
|
|
- assertEquals(1, map.findAll("1:5:13").size());
|
|
|
- assertEquals(0, map.findAll("1:5:00").size());
|
|
|
-
|
|
|
- assertEquals(7, map.findAll("6:4:42").size());
|
|
|
- assertEquals(4, map.findAll("6:4:20").size());
|
|
|
- assertEquals(0, map.findAll("7:3:10").size());
|
|
|
-
|
|
|
- assertEquals(nodes5s4, zip(map.findAll("1:5:99")).toString());
|
|
|
- assertEquals(nodes5s2, zip(map.findAll("1:5:54")).toString());
|
|
|
- assertEquals(nodes5s1, zip(map.findAll("1:5:13")).toString());
|
|
|
- assertEquals(nodes5s0, zip(map.findAll("1:5:00")).toString());
|
|
|
-
|
|
|
- assertEquals(nodes6s7, zip(map.findAll("6:4:42")).toString());
|
|
|
- assertEquals(nodes6s4, zip(map.findAll("6:4:20")).toString());
|
|
|
- assertEquals(nodes6s0, zip(map.findAll("7:3:10")).toString());
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
- @Test
|
|
|
- public void duplicates() {
|
|
|
- QuotientMap<String, Integer> map = makeMap();
|
|
|
-
|
|
|
- String exp1 = "[{1:5:13=1513}, {1:5:54=1554}, {1:5:61=1561}, {1:5:72=1572}]";
|
|
|
- String exp2 = "[{1:5:13=151300}, {1:5:54=1554}, {1:5:61=1561}, {1:5:72=1572}]";
|
|
|
- String exp3 = "[{1:5:13=151300}, {1:5:54=155400}, {1:5:61=1561}, {1:5:72=1572}]";
|
|
|
- String exp4 = "[{1:5:13=151300}, {1:5:54=155400}, {1:5:61=1561}, {1:5:72=1572}]";
|
|
|
-
|
|
|
- assertEquals(exp1, zip(map.findAll("1:5:99")).toString());
|
|
|
-
|
|
|
- assertEquals(1513, map.put("1:5:13", 151300).intValue());
|
|
|
- assertEquals(exp2, zip(map.findAll("1:5:99")).toString());
|
|
|
-
|
|
|
- assertEquals(1554, map.replace("1:5:54", 155400).intValue());
|
|
|
- assertEquals(exp3, zip(map.findAll("1:5:99")).toString());
|
|
|
-
|
|
|
- assertNull(map.replace("1:5:58", 155800));
|
|
|
- assertEquals(exp4, zip(map.findAll("1:5:99")).toString());
|
|
|
- }
|
|
|
-
|
|
|
- @Test
|
|
|
- public void putNeighbour() {
|
|
|
- {
|
|
|
- QuotientMap<Class<?>, Integer> tree = new QuotientTreeMap<>(Class::isAssignableFrom);
|
|
|
- tree.put(A1.class, 1);
|
|
|
- tree.put(A1Q.class, 2);
|
|
|
- tree.put(A1R.class, 3);
|
|
|
- tree.put(A1P.class, 4);
|
|
|
- tree.put(A1P1.class, 5);
|
|
|
- tree.put(A1P1S.class, 6);
|
|
|
- tree.put(A1P1D.class, 7);
|
|
|
-// print(tree);
|
|
|
-
|
|
|
- Collection<String> expected = new HashSet<>(Arrays.asList(
|
|
|
- "/A1=1",
|
|
|
- "/A1/A1Q=2",
|
|
|
- "/A1/A1R=3",
|
|
|
- "/A1/A1P=4",
|
|
|
- "/A1/A1P/A1P1=5",
|
|
|
- "/A1/A1P/A1P1/A1P1S=6",
|
|
|
- "/A1/A1P/A1P1/A1P1D=7"
|
|
|
- ));
|
|
|
- assertEquals(expected, new HashSet<>(dump(tree)));
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
- {
|
|
|
- QuotientMap<Class<?>, Integer> tree = new QuotientTreeMap<>(Class::isAssignableFrom);
|
|
|
- tree.put(A1.class, 1);
|
|
|
- tree.put(A1Q.class, 2);
|
|
|
- tree.put(A1R.class, 3);
|
|
|
- tree.put(A1P1S.class, 4);
|
|
|
- tree.put(A1P1D.class, 5);
|
|
|
- tree.put(A1P.class, 6);
|
|
|
- tree.put(A1P1.class, 7);
|
|
|
- //print(zip(tree));
|
|
|
-
|
|
|
- Collection<String> expected = new HashSet<>(Arrays.asList(
|
|
|
- "/A1=1",
|
|
|
- "/A1/A1Q=2",
|
|
|
- "/A1/A1R=3",
|
|
|
- "/A1/A1P=6",
|
|
|
- "/A1/A1P/A1P1=7",
|
|
|
- "/A1/A1P/A1P1/A1P1S=4",
|
|
|
- "/A1/A1P/A1P1/A1P1D=5"
|
|
|
- ));
|
|
|
- assertEquals(expected, new HashSet<>(dump(tree)));
|
|
|
- }
|
|
|
-
|
|
|
- {
|
|
|
- QuotientMap<Class<?>, Integer> tree = new QuotientTreeMap<>(Class::isAssignableFrom);
|
|
|
- tree.put(A1.class, 1);
|
|
|
- tree.put(A1Q.class, 2);
|
|
|
- tree.put(A1R.class, 3);
|
|
|
- tree.put(A1P1S.class, 4);
|
|
|
- tree.put(A1P1D.class, 5);
|
|
|
- tree.put(A1P1.class, 6);
|
|
|
- tree.put(A1P.class, 7);
|
|
|
-// print(zip(tree));
|
|
|
-
|
|
|
- Collection<String> expected = new HashSet<>(Arrays.asList(
|
|
|
- "/A1=1",
|
|
|
- "/A1/A1Q=2",
|
|
|
- "/A1/A1R=3",
|
|
|
- "/A1/A1P=7",
|
|
|
- "/A1/A1P/A1P1=6",
|
|
|
- "/A1/A1P/A1P1/A1P1S=4",
|
|
|
- "/A1/A1P/A1P1/A1P1D=5"
|
|
|
- ));
|
|
|
- List<String> olist = dump(tree);
|
|
|
- List<String> rlist = revdump(tree);
|
|
|
-
|
|
|
- assertEquals(expected, new HashSet<>(olist));
|
|
|
- assertEquals(expected, new HashSet<>(rlist));
|
|
|
-
|
|
|
- System.out.println(olist);
|
|
|
- System.out.println("====");
|
|
|
- System.out.println(rlist);
|
|
|
-
|
|
|
- assertTrue(olist.indexOf("/A1=1") < olist.indexOf("/A1/A1R=3"));
|
|
|
- assertTrue(olist.indexOf("/A1/A1P/A1P1=6") < olist.indexOf("/A1/A1P/A1P1/A1P1S=4"));
|
|
|
-
|
|
|
- assertTrue(rlist.indexOf("/A1=1") > rlist.indexOf("/A1/A1R=3"));
|
|
|
- assertTrue(rlist.indexOf("/A1/A1P/A1P1=6") > rlist.indexOf("/A1/A1P/A1P1/A1P1S=4"));
|
|
|
- }
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
- @Test
|
|
|
- public void removeClear() {
|
|
|
- QuotientMap<String, Integer> map = makeMap();
|
|
|
-
|
|
|
- assertEquals(20, map.size());
|
|
|
-
|
|
|
- assertEquals(1561, map.get("1:5:61").intValue());
|
|
|
- assertEquals(1561, map.remove("1:5:61").intValue());
|
|
|
- assertEquals(1554, map.get("1:5:61").intValue());
|
|
|
-
|
|
|
- assertEquals(1554, map.remove("1:5:55").intValue());
|
|
|
- assertEquals(1513, map.get("1:5:61").intValue());
|
|
|
-
|
|
|
- assertEquals(6420, map.removeExact("6:4:20").intValue());
|
|
|
- assertEquals(6415, map.get("6:4:20").intValue());
|
|
|
-
|
|
|
- assertNull(map.removeExact("6:4:32"));
|
|
|
- assertEquals(6430, map.get("6:4:32").intValue());
|
|
|
-
|
|
|
- assertEquals(6430, map.removeExact("6:4:30").intValue());
|
|
|
- assertEquals(6424, map.get("6:4:30").intValue());
|
|
|
-
|
|
|
- assertNull(map.remove("9:0:00"));
|
|
|
-
|
|
|
- assertEquals(16, map.size());
|
|
|
- assertEquals(16, IteratorUtils.size(map.entrySet().iterator()));
|
|
|
-
|
|
|
- map.clear();
|
|
|
- assertEquals(0, map.size());
|
|
|
- assertEquals(0, IteratorUtils.size(map.entrySet().iterator()));
|
|
|
-
|
|
|
- assertEquals("[]", zip(map.entrySet()).toString());
|
|
|
-
|
|
|
- fill(map);
|
|
|
- assertEquals(NODES, zip(map.entrySet()).toString());
|
|
|
- }
|
|
|
-
|
|
|
- @Test
|
|
|
- public void contains() {
|
|
|
- QuotientMap<String, Integer> map = makeMap();
|
|
|
-
|
|
|
- assertTrue(map.containsKey("6:4:30"));
|
|
|
- assertFalse(map.containsKey("6:4:32"));
|
|
|
- assertFalse(map.containsKey("9:0:00"));
|
|
|
-
|
|
|
- assertTrue(map.containsValue(6430));
|
|
|
- assertFalse(map.containsValue(6432));
|
|
|
- assertFalse(map.containsValue("?"));
|
|
|
- }
|
|
|
-
|
|
|
- @Test
|
|
|
- public void entrySet() {
|
|
|
- QuotientMap<String, Integer> map = makeMap();
|
|
|
- Set<Map.Entry<String, Integer>> entries = map.entrySet();
|
|
|
-
|
|
|
- assertEquals(20, entries.size());
|
|
|
- assertTrue(entries.contains(new SimpleEntry<>("2:6:22", 2622)));
|
|
|
- assertFalse(entries.contains(new SimpleEntry<>("2:6:50", 2622)));
|
|
|
- assertFalse(entries.contains(new SimpleEntry<>("2:6:22", 2600)));
|
|
|
-
|
|
|
- assertTrue(entries.remove(new SimpleEntry<>("1:8:13", 1813)));
|
|
|
- assertFalse(entries.remove(new SimpleEntry<>("1:5:54", 1500)));
|
|
|
- assertFalse(entries.remove(new SimpleEntry<>("1:5:55", 1554)));
|
|
|
-
|
|
|
- assertEquals(19, entries.size());
|
|
|
-
|
|
|
- entries.add(new SimpleEntry<>("1:5:17", 1517));
|
|
|
- entries.add(new SimpleEntry<>("6:4:11", 641100));
|
|
|
-
|
|
|
- String content = "[{1:1:02=1102}, {1:5:13=1513}, {1:5:17=1517}, {1:5:54=1554}, {1:5:61=1561}, {1:5:72=1572}, {2:2:14=2214}, {2:3:15=2315}, {2:3:73=2313}, {2:6:22=2622}, {3:4:51=3451}, {3:4:70=3470}, {3:9:52=3952}, {6:4:11=641100}, {6:4:12=6412}, {6:4:15=6415}, {6:4:20=6420}, {6:4:24=6424}, {6:4:30=6430}, {6:4:42=6442}]";
|
|
|
- assertEquals(content, zip(map.entrySet()).toString());
|
|
|
-
|
|
|
- TreeSet<String> collected = IteratorUtils.collect(IteratorUtils.map(entries.iterator(), Object::toString), new TreeSet<>());
|
|
|
- assertEquals(content, collected.toString());
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
- @Test
|
|
|
- public void keySet() {
|
|
|
- QuotientMap<String, Integer> map = makeMap();
|
|
|
- Set<String> keys = map.keySet();
|
|
|
-
|
|
|
- print(map);
|
|
|
-
|
|
|
- assertEquals(20, keys.size());
|
|
|
- assertTrue(keys.contains("2:6:22"));
|
|
|
- assertFalse(keys.contains("2:6:50"));
|
|
|
-
|
|
|
- assertTrue(keys.remove("1:8:13"));
|
|
|
- assertFalse(keys.remove("1:5:55"));
|
|
|
-
|
|
|
- assertEquals(19, keys.size());
|
|
|
-
|
|
|
- String content = "[{1:1:02=1102}, {1:5:13=1513}, {1:5:54=1554}, {1:5:61=1561}, {1:5:72=1572}, {2:2:14=2214}, {2:3:15=2315}, {2:3:73=2313}, {2:6:22=2622}, {3:4:51=3451}, {3:4:70=3470}, {3:9:52=3952}, {6:4:11=6411}, {6:4:12=6412}, {6:4:15=6415}, {6:4:20=6420}, {6:4:24=6424}, {6:4:30=6430}, {6:4:42=6442}]";
|
|
|
- assertEquals(content, zip(map.entrySet()).toString());
|
|
|
-
|
|
|
- String keyset = "[1:1:02, 1:5:13, 1:5:54, 1:5:61, 1:5:72, 2:2:14, 2:3:15, 2:3:73, 2:6:22, 3:4:51, 3:4:70, 3:9:52, 6:4:11, 6:4:12, 6:4:15, 6:4:20, 6:4:24, 6:4:30, 6:4:42]";
|
|
|
- TreeSet<String> collected = IteratorUtils.collect(keys.iterator(), new TreeSet<>());
|
|
|
- assertEquals(keyset, collected.toString());
|
|
|
- }
|
|
|
-
|
|
|
- @Test
|
|
|
- public void values() {
|
|
|
- QuotientMap<String, Integer> map = makeMap();
|
|
|
- Collection<Integer> values = map.values();
|
|
|
-
|
|
|
- print(map);
|
|
|
-
|
|
|
- assertEquals(20, values.size());
|
|
|
- assertTrue(values.contains(2622));
|
|
|
- assertFalse(values.contains(2650));
|
|
|
-
|
|
|
- String keyset = "[1102, 1513, 1554, 1561, 1572, 1813, 2214, 2313, 2315, 2622, 3451, 3470, 3952, 6411, 6412, 6415, 6420, 6424, 6430, 6442]";
|
|
|
- TreeSet<Integer> collected = IteratorUtils.collect(values.iterator(), new TreeSet<>());
|
|
|
- assertEquals(keyset, collected.toString());
|
|
|
- }
|
|
|
-
|
|
|
- // TODO: putAll
|
|
|
-
|
|
|
- // TODO: entrySet: iterator+, size+, contains+, remove+, add+
|
|
|
-
|
|
|
- // TODO: keySet: iterator, size, contains, remove
|
|
|
-
|
|
|
- // TODO: values: iterator, size+, contains+
|
|
|
-
|
|
|
-}
|