/**
* 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.treedoc;
import static org.junit.Assert.*;
import java.util.Iterator;
import java.util.NoSuchElementException;
import jbenchmarker.treedoc.TreedocIdentifier.ComponentScanner;
import jbenchmarker.treedoc.TreedocIdentifier.EdgeDirection;
import jbenchmarker.treedoc.TreedocIdentifier.Recorder;
import org.junit.Before;
import org.junit.Test;
/**
*
* @author mzawirski
*/
public class TreedocIdentifierTest {
private Recorder idRecorder;
@Before
public void setUp() {
idRecorder = new TreedocIdentifier.Recorder();
}
@Test
public void testLength1() {
final UniqueTag tag = new UniqueTag(0, 0);
idRecorder.recordEdge(EdgeDirection.LEFT, tag);
final TreedocIdentifier id = idRecorder.createIdentifier();
final Iterator<ComponentScanner> iter = id.iterator();
assertEquals(1, id.length());
assertTrue(iter.hasNext());
final ComponentScanner component = iter.next();
assertEquals(EdgeDirection.LEFT, component.getDirection());
assertEquals(tag, component.getTag());
assertFalse(iter.hasNext());
try {
iter.next();
fail();
} catch (NoSuchElementException x) {
// expected
}
}
@Test
public void testLengthyWithNull() {
final UniqueTag tag0 = new UniqueTag(0, 0);
idRecorder.recordEdge(EdgeDirection.LEFT, tag0);
final UniqueTag tag1 = null;
idRecorder.recordEdge(EdgeDirection.LEFT, tag1);
final UniqueTag tag2 = new UniqueTag(1, 5);
idRecorder.recordEdge(EdgeDirection.RIGHT, tag2);
final TreedocIdentifier id = idRecorder.createIdentifier();
assertEquals(3, id.length());
final Iterator<ComponentScanner> iter = id.iterator();
assertTrue(iter.hasNext());
ComponentScanner component = iter.next();
assertEquals(EdgeDirection.LEFT, component.getDirection());
assertEquals(tag0, component.getTag());
assertTrue(iter.hasNext());
component = iter.next();
assertEquals(EdgeDirection.LEFT, component.getDirection());
assertEquals(tag1, component.getTag());
assertTrue(iter.hasNext());
component = iter.next();
assertEquals(EdgeDirection.RIGHT, component.getDirection());
assertEquals(tag2, component.getTag());
assertFalse(iter.hasNext());
}
@Test
public void testWithRepeatitions() {
final UniqueTag tag01 = new UniqueTag(0, 0);
idRecorder.recordEdge(EdgeDirection.LEFT, tag01);
idRecorder.recordEdge(EdgeDirection.RIGHT, tag01);
final UniqueTag tag234 = null;
idRecorder.recordEdge(EdgeDirection.LEFT, tag234);
idRecorder.recordEdge(EdgeDirection.RIGHT, tag234);
idRecorder.recordEdge(EdgeDirection.RIGHT, tag234);
final UniqueTag tag5 = new UniqueTag(1, 5);
idRecorder.recordEdge(EdgeDirection.RIGHT, tag5);
final TreedocIdentifier id = idRecorder.createIdentifier();
assertEquals(6, id.length());
final Iterator<ComponentScanner> iter = id.iterator();
assertTrue(iter.hasNext());
ComponentScanner component = iter.next();
assertEquals(EdgeDirection.LEFT, component.getDirection());
assertEquals(tag01, component.getTag());
assertTrue(iter.hasNext());
iter.next();
assertEquals(EdgeDirection.RIGHT, component.getDirection());
assertEquals(tag01, component.getTag());
assertTrue(iter.hasNext());
component = iter.next();
assertEquals(EdgeDirection.LEFT, component.getDirection());
assertEquals(tag234, component.getTag());
assertTrue(iter.hasNext());
component = iter.next();
assertEquals(EdgeDirection.RIGHT, component.getDirection());
assertEquals(tag234, component.getTag());
assertTrue(iter.hasNext());
component = iter.next();
assertEquals(EdgeDirection.RIGHT, component.getDirection());
assertEquals(tag234, component.getTag());
assertTrue(iter.hasNext());
component = iter.next();
assertEquals(EdgeDirection.RIGHT, component.getDirection());
assertEquals(tag5, component.getTag());
assertFalse(iter.hasNext());
}
@Test
public void testStartsWithNull() {
final UniqueTag tag0 = null;
idRecorder.recordEdge(EdgeDirection.LEFT, tag0);
final UniqueTag tag1 = new UniqueTag(1, 5);
idRecorder.recordEdge(EdgeDirection.RIGHT, tag1);
final TreedocIdentifier id = idRecorder.createIdentifier();
assertEquals(2, id.length());
final Iterator<ComponentScanner> iter = id.iterator();
assertTrue(iter.hasNext());
ComponentScanner component = iter.next();
assertEquals(EdgeDirection.LEFT, component.getDirection());
assertEquals(tag0, component.getTag());
assertTrue(iter.hasNext());
iter.next();
assertEquals(EdgeDirection.RIGHT, component.getDirection());
assertEquals(tag1, component.getTag());
}
}