/**
* 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 jbenchmarker.woot.wooth;
import crdt.CRDT;
import crdt.Factory;
import jbenchmarker.core.SequenceOperation;
import jbenchmarker.woot.WootDocument;
import jbenchmarker.woot.WootIdentifier;
import org.junit.Test;
import static org.junit.Assert.*;
/**
*
* @author urso
*/
public class WootHDocumentTest {
// WootHashNode a, b, c, d, e, f, g, h, x, z;
@Test
public void testFactory() throws Exception {
Factory<CRDT> rf = (Factory<CRDT>) Class.forName("jbenchmarker.factories.WootFactories$WootHFactory").newInstance();
rf.create();
}
/**
* Test of view method, of class WootHDocumentTest.
*/
@Test
public void testView() {
System.out.println("view");
WootHashDocument instance = new WootHashDocument();
assertEquals("", instance.view());
WootHashNode c = new WootHashNode(new WootIdentifier(1,1), 'c', true, instance.getFirst().getNext(), 1);
instance.getFirst().setNext(c);
assertEquals("c", instance.view());
WootHashNode b = new WootHashNode(new WootIdentifier(1,2), 'b', false, c, 1);
instance.getFirst().setNext(b);
assertEquals("c", instance.view());
WootHashNode a = new WootHashNode(new WootIdentifier(2,1), 'a', true, b, 1);
instance.getFirst().setNext(a);
assertEquals("ac", instance.view());
}
/**
* Test of getVisible method, of class WootHDocumentTest.
*/
@Test
public void testGetVisible() {
System.out.println("getVisible");
WootHashDocument instance = new WootHashDocument();
WootHashNode c = new WootHashNode(new WootIdentifier(1,1), 'c', true, instance.getFirst().getNext(), 1);
instance.getFirst().setNext(c);
assertEquals(c, instance.getVisible(0));
WootHashNode b = new WootHashNode(new WootIdentifier(1,2), 'b', false, c, 1);
instance.getFirst().setNext(b);
assertEquals(c, instance.getVisible(0));
WootHashNode a = new WootHashNode(new WootIdentifier(2,1), 'a', true, b, 1);
instance.getFirst().setNext(a);
assertEquals(a, instance.getVisible(0));
assertEquals(c, instance.getVisible(1));
}
/**
* Test of nextVisible method, of class WootHDocumentTest.
*/
@Test
public void testNextVisible() {
System.out.println("nextVisible");
WootHashDocument instance = new WootHashDocument();
WootHashNode c = new WootHashNode(new WootIdentifier(1,1), 'c', true, instance.getFirst().getNext(), 1);
instance.getFirst().setNext(c);
assertEquals(c, instance.nextVisible(instance.getFirst()));
WootHashNode b = new WootHashNode(new WootIdentifier(1,2), 'b', false, c, 1);
instance.getFirst().setNext(b);
assertEquals(c, instance.nextVisible(instance.getFirst()));
WootHashNode a = new WootHashNode(new WootIdentifier(2,1), 'a', true, b, 1);
instance.getFirst().setNext(a);
assertEquals(a, instance.nextVisible(instance.getFirst()));
assertEquals(c, instance.nextVisible(a));
}
/**
* Test of getVisible method, of class WootHDocumentTest.
*/
@Test
public void testGetPrevious() {
System.out.println("getPrevious");
WootHashDocument instance = new WootHashDocument();
assertEquals(instance.getFirst(), instance.getPrevious(0));
WootHashNode c = new WootHashNode(new WootIdentifier(1,1), 'c', true, instance.getFirst().getNext(), 1);
instance.getFirst().setNext(c);
assertEquals(instance.getFirst(), instance.getPrevious(0));
assertEquals(c, instance.getPrevious(1));
WootHashNode b = new WootHashNode(new WootIdentifier(1,2), 'b', false, c, 1);
instance.getFirst().setNext(b);
assertEquals(instance.getFirst(), instance.getPrevious(0));
assertEquals(c, instance.getPrevious(1));
WootHashNode a = new WootHashNode(new WootIdentifier(2,1), 'a', true, b, 1);
instance.getFirst().setNext(a);
assertEquals(instance.getFirst(), instance.getPrevious(0));
assertEquals(a, instance.getPrevious(1));
assertEquals(c, instance.getPrevious(2));
}
/**
* Test of getVisible method, of class WootHDocumentTest.
*/
@Test
public void testGetNext() {
System.out.println("getNext");
WootHashDocument instance = new WootHashDocument();
LinkedNode CB = instance.getFirst(), CE = instance.getFirst().getNext();
assertEquals(CE, instance.getNext(CB));
WootHashNode c = new WootHashNode(new WootIdentifier(1,1), 'c', true, instance.getFirst().getNext(), 1);
instance.getFirst().setNext(c);
assertEquals(c, instance.getNext(CB));
assertEquals(CE, instance.getNext(c));
WootHashNode b = new WootHashNode(new WootIdentifier(1,2), 'b', false, c, 1);
instance.getFirst().setNext(b);
assertEquals(c, instance.getNext(CB));
assertEquals(CE, instance.getNext(c));
WootHashNode a = new WootHashNode(new WootIdentifier(2,1), 'a', true, b, 1);
instance.getFirst().setNext(a);
assertEquals(a, instance.getNext(CB));
assertEquals(c, instance.getNext(a));
assertEquals(CE, instance.getNext(c));
}
@Test
public void testApply() {
System.out.println("apply");
WootHashDocument instance = new WootHashDocument();
SequenceOperation ins = SequenceOperation.insert( 0, ""),
del = SequenceOperation.delete( 0, 0);
WootIdentifier a = new WootIdentifier(1,1), b = new WootIdentifier(1,2),
c = new WootIdentifier(2,1), d = new WootIdentifier(2,2),
e = new WootIdentifier(3,1), f = new WootIdentifier(3,2),
g = new WootIdentifier(0,1);
instance.apply(WootDocument.insert(ins, a, WootIdentifier.IB, WootIdentifier.IE, 'a'));
assertEquals("a", instance.view());
instance.apply(WootDocument.insert(ins, b, a, WootIdentifier.IE, 'b'));
assertEquals("ab", instance.view());
instance.apply(WootDocument.insert(ins, c, WootIdentifier.IB, a, 'c'));
assertEquals("cab", instance.view());
instance.apply(instance.delete(del, c));
assertEquals("ab", instance.view());
instance.apply(WootDocument.insert(ins, e, a, b, 'e'));
assertEquals("aeb", instance.view());
instance.apply(instance.delete(del, e));
assertEquals("ab", instance.view());
instance.apply(WootDocument.insert(ins, d, a, b, 'd'));
assertEquals("adb", instance.view());
instance.apply(WootDocument.insert(ins, f, a, b, 'f'));
assertTrue(f.compareTo(d) > 0);
assertEquals("adfb", instance.view());
instance.apply(WootDocument.insert(ins, g, a, b, 'g'));
assertTrue(g.compareTo(d) < 0);
assertEquals("agdfb", instance.view());
}
@Test
public void wootPuzzle() {
System.out.println("Woot Puzzle");
SequenceOperation ins = SequenceOperation.insert( 0, "");
WootHashDocument instance = new WootHashDocument();
WootIdentifier a = new WootIdentifier(1,1), b = new WootIdentifier(3,1),
c = new WootIdentifier(2,1);
instance.apply(WootDocument.insert(ins, a, WootIdentifier.IB, WootIdentifier.IE, 'a'));
instance.apply(WootDocument.insert(ins, b, WootIdentifier.IB, a, 'b'));
instance.apply(WootDocument.insert(ins, c, WootIdentifier.IB, WootIdentifier.IE, 'c'));
assertTrue(c.compareTo(a) > 0);
assertTrue(c.compareTo(b) < 0);
assertEquals("bac", instance.view());
}
}