/** * Replication Benchmarker * https://github.com/score-team/replication-benchmarker/ * Copyright (C) 2013 LORIA / Inria / SCORE Team * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ package crdt.tree.wordtree; import crdt.tree.wordtree.policy.WordIncrementalCompact; import crdt.tree.wordtree.policy.WordIncrementalRoot; import crdt.tree.wordtree.policy.WordIncrementalSkipOpti; import crdt.tree.wordtree.policy.WordIncrementalReappear; import crdt.tree.PseudoSet; import crdt.tree.wordtree.policy.WordIncrementalSkip; import crdt.tree.wordtree.policy.WordCompact; import crdt.tree.wordtree.policy.WordReappear; import crdt.tree.wordtree.policy.WordRoot; import crdt.tree.wordtree.policy.WordSkip; import java.util.Set; import collect.Node; import java.util.List; import collect.Tree; import collect.HashTree; import collect.UnorderedNode; import org.junit.AfterClass; import org.junit.BeforeClass; import org.junit.Test; import static org.junit.Assert.*; import static collect.Utils.*; /** * * @author urso */ public class WordConnectionPolicyTest { static final char ta[] = {'a'}, tb[] = {'b'}, tbc[] = {'b', 'c'}, tac[] = {'a', 'c'}, taca[] = {'a', 'c', 'a'}, tacd[] = {'a', 'c','d'}, tacde[] = {'a', 'c', 'd', 'e'}, tacaf[] = {'a', 'c', 'a', 'f'}; static final List<Character> a = toList(ta), b = toList(tb), bc = toList(tbc), ac = toList(tac), aca = toList(taca), acd = toList(tacd), acde = toList(tacde), acaf = toList(tacaf); static final Set<List<Character>> wordsorphan = toSet(a, b, bc, acde, aca, acaf); static final Set<List<Character>> words = toSet(a, b, bc, ac, aca, acd, acde); public WordConnectionPolicyTest() { } @BeforeClass public static void setUpClass() throws Exception { } @AfterClass public static void tearDownClass() throws Exception { } private void notifyAll(Set<List<Character>> wordsorphan, WordPolicy policy) { PseudoSet set = new PseudoSet(); set.addObserver(policy); for (List l : wordsorphan) { set.adding(l); } } @Test public void testSkipEmpty() { WordConnectionPolicy policy = new WordSkip(); policy.update(new PseudoSet(), null); policy.connect(); // assertSame(1, policy.addMapping().size()); assertEquals(new HashTree<Character>(), policy.lookup()); } @Test public void testSkip() { WordConnectionPolicy policy = new WordSkip(); Tree<Character> treeResult = new HashTree<Character>(); Node<Character> na = treeResult.add(null, 'a'), nb = treeResult.add(null, 'b'), nbc = treeResult.add(nb, 'c'); policy.update(new PseudoSet(wordsorphan), null); policy.connect(); // assertSame("" + policy.addMapping(), 4, policy.addMapping().size()); assertEquals(treeResult, policy.lookup()); } @Test public void testSkipIncrementalEmpty() { WordPolicy policy = new WordIncrementalSkip(); // assertSame(1, policy.addMapping().size()); assertEquals(new HashTree<Character>(), policy.lookup()); } @Test public void testSkipIncremental() { WordPolicy policy = new WordIncrementalSkip(); Tree<Character> treeResult = new HashTree<Character>(); Node<Character> na = treeResult.add(null, 'a'), nb = treeResult.add(null, 'b'), nbc = treeResult.add(nb, 'c'); notifyAll(wordsorphan, policy); // assertSame("" + policy.addMapping(), 7, policy.addMapping().size()); assertEquals(treeResult, policy.lookup()); } @Test public void testSkipIncOptilEmpty() { WordPolicy policy = new WordIncrementalSkipOpti(); // assertSame(1, policy.addMapping().size()); assertEquals(new HashTree<Character>(), policy.lookup()); } @Test public void testSkipIncOpti() { WordPolicy policy = new WordIncrementalSkipOpti(); Tree<Character> treeResult = new HashTree<Character>(); Node<Character> na = treeResult.add(null, 'a'), nb = treeResult.add(null, 'b'), nbc = treeResult.add(nb, 'c'); notifyAll(wordsorphan, policy); // assertSame("" + policy.addMapping(), 7, policy.addMapping().size()); assertEquals(treeResult, policy.lookup()); } @Test public void testReappearEmpty() { WordConnectionPolicy policy = new WordReappear(); policy.update(new PseudoSet(), null); policy.connect(); // assertSame(1, policy.addMapping().size()); assertEquals(new HashTree<Character>(), policy.lookup()); } @Test public void testReappear() { WordConnectionPolicy policy = new WordReappear(); Tree<Character> treeResult = new HashTree<Character>(); Node<Character> na = treeResult.add(null, 'a'), nb = treeResult.add(null, 'b'), nbc = treeResult.add(nb, 'c'), nac = treeResult.add(na, 'c'), naca = treeResult.add(nac, 'a'), nacd = treeResult.add(nac, 'd'), nacde = treeResult.add(nacd, 'e'), nacaf = treeResult.add(naca, 'f'); policy.update(new PseudoSet(wordsorphan), null); policy.connect(); // assertSame("" + policy.addMapping(), 7, policy.addMapping().size()); Node acn = ((UnorderedNode) policy.lookup().getRoot()).getChild('a').getChild('c'); // assertNull(policy.addMapping(acn)); assertEquals(treeResult, policy.lookup()); } @Test public void testReappearIncrementalEmpty() { WordPolicy policy = new WordIncrementalReappear(); // assertSame(1, policy.addMapping().size()); assertEquals(new HashTree<Character>(), policy.lookup()); } @Test public void testReappearIncremental() { WordPolicy policy = new WordIncrementalReappear(); Tree<Character> treeResult = new HashTree<Character>(); Node<Character> na = treeResult.add(null, 'a'), nb = treeResult.add(null, 'b'), nbc = treeResult.add(nb, 'c'), nac = treeResult.add(na, 'c'), naca = treeResult.add(nac, 'a'), nacd = treeResult.add(nac, 'd'), nacde = treeResult.add(nacd, 'e'), nacaf = treeResult.add(naca, 'f'); notifyAll(wordsorphan, policy); // assertSame("" + policy.addMapping(), 7, policy.addMapping().size()); Node acn = ((UnorderedNode) policy.lookup().getRoot()).getChild('a').getChild('c'); // assertNull(policy.addMapping(acn)); assertEquals(treeResult, policy.lookup()); } @Test public void testRootEmpty() { WordConnectionPolicy policy = new WordRoot(); policy.update(new PseudoSet(), null); policy.connect(); // assertSame(1, policy.addMapping().size()); assertEquals(new HashTree<Character>(), policy.lookup()); } @Test public void testRoot() { WordConnectionPolicy policy = new WordRoot(); Tree<Character> treeResult = new HashTree<Character>(); Node<Character> na = treeResult.add(null, 'a'), nb = treeResult.add(null, 'b'), nbc = treeResult.add(nb, 'c'), naf = treeResult.add(na, 'f'), ne = treeResult.add(null, 'e'); policy.update(new PseudoSet(wordsorphan), null); policy.connect(); // assertSame("" + policy.addMapping(), 7, policy.addMapping().size()); assertEquals(treeResult, policy.lookup()); } @Test public void testRootIncrementalEmpty() { WordPolicy policy = new WordIncrementalRoot(); // assertSame(1, policy.addMapping().size()); assertEquals(new HashTree<Character>(), policy.lookup()); } @Test public void testRootIncremental() { WordPolicy policy = new WordIncrementalRoot(); Tree<Character> treeResult = new HashTree<Character>(); Node<Character> na = treeResult.add(null, 'a'), nb = treeResult.add(null, 'b'), nbc = treeResult.add(nb, 'c'), naf = treeResult.add(na, 'f'), ne = treeResult.add(null, 'e'); notifyAll(wordsorphan,policy); // assertSame("" + policy.addMapping(), 7, policy.addMapping().size()); assertEquals(treeResult, policy.lookup()); } @Test public void testCompactEmpty() { WordConnectionPolicy policy = new WordCompact(); policy.update(new PseudoSet(), null); policy.connect(); // assertSame(1, policy.addMapping().size()); assertEquals(new HashTree<Character>(), policy.lookup()); } @Test public void testCompact() { WordConnectionPolicy policy = new WordCompact(); Tree<Character> treeResult = new HashTree<Character>(); Node<Character> na = treeResult.add(null, 'a'), nb = treeResult.add(null, 'b'), nbc = treeResult.add(nb, 'c'), naa = treeResult.add(na, 'a'), naaf = treeResult.add(naa, 'f'), nae = treeResult.add(na, 'e'); policy.update(new PseudoSet(wordsorphan), null); policy.connect(); // assertSame("" + policy.addMapping(), 7, policy.addMapping().size()); assertEquals(treeResult, policy.lookup()); } @Test public void testCompactIncrementalEmpty() { WordPolicy policy = new WordIncrementalCompact(); // assertSame(1, policy.addMapping().size()); assertEquals(new HashTree<Character>(), policy.lookup()); } @Test public void testCompactIncremental() { WordPolicy policy = new WordIncrementalCompact(); Tree<Character> treeResult = new HashTree<Character>(); Node<Character> na = treeResult.add(null, 'a'), nb = treeResult.add(null, 'b'), nbc = treeResult.add(nb, 'c'), naa = treeResult.add(na, 'a'), naaf = treeResult.add(naa, 'f'), nae = treeResult.add(na, 'e'); notifyAll(wordsorphan,policy); // assertSame("" + policy.addMapping(), 7, policy.addMapping().size()); assertEquals(treeResult, policy.lookup()); } }