// Copyright (C) 2011-2012 CRS4.
//
// This file is part of Seal.
//
// Seal 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.
//
// Seal 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 Seal. If not, see <http://www.gnu.org/licenses/>.
package tests.it.crs4.seal.recab;
import org.junit.*;
import static org.junit.Assert.*;
import it.crs4.seal.recab.ObservationCount;
import java.io.IOException;
import java.io.DataInput;
import java.io.ByteArrayInputStream;
import java.io.DataInputStream;
import java.io.DataOutput;
import java.io.ByteArrayOutputStream;
import java.io.DataOutputStream;
public class TestObservationCount
{
private ObservationCount count;
@Before
public void setup()
{
count = new ObservationCount();
}
@Test
public void testDefaultConstructor()
{
assertEquals(0L, count.getObservations());
assertEquals(0L, count.getMismatches());
}
@Test
public void testParameterizedConstructor()
{
ObservationCount c = new ObservationCount(66, 55);
assertEquals(66, c.getObservations());
assertEquals(55, c.getMismatches());
}
@Test(expected=IllegalArgumentException.class)
public void testConstructNegativeObservations()
{
new ObservationCount(-1, 22);
}
@Test(expected=IllegalArgumentException.class)
public void testConstructNegativeMismatches()
{
new ObservationCount(22, -1);
}
@Test(expected=IllegalArgumentException.class)
public void testConstructMoreObsThanMis()
{
new ObservationCount(22, 44);
}
@Test
public void testEquals()
{
assertEquals(new ObservationCount(55, 44), new ObservationCount(55, 44));
assertFalse( (new ObservationCount(66, 55)).equals(new ObservationCount(66, 1)) );
assertFalse( (new ObservationCount(66, 55)).equals(new ObservationCount(60, 55)) );
}
@Test
public void testSet()
{
count.set(21, 12);
assertEquals(21, count.getObservations());
assertEquals(12, count.getMismatches());
}
@Test(expected=IllegalArgumentException.class)
public void testSetNegativeObservations()
{
count.set(-1, 22);
}
@Test(expected=IllegalArgumentException.class)
public void testSetNegativeMismatches()
{
count.set(22, -1);
}
@Test(expected=IllegalArgumentException.class)
public void testSetMoreObsThanMis()
{
count.set(22, 44);
}
@Test
public void testSetWithObservationCount()
{
ObservationCount one = new ObservationCount(5, 3);
ObservationCount two = new ObservationCount(7, 1);
one.set(two);
assertEquals(two, one);
assertNotSame(one, two);
}
@Test
public void testAddToThis()
{
ObservationCount one = new ObservationCount(5, 3);
ObservationCount two = new ObservationCount(7, 1);
ObservationCount result = one.addToThis(two);
assertSame(one, result);
assertEquals(7+5, one.getObservations());
assertEquals(3+1, one.getMismatches());
}
///////////////////////////////////////////////////////////////
// serialization
///////////////////////////////////////////////////////////////
private static ObservationCount cloneBySerialization(ObservationCount original) throws IOException
{
ByteArrayOutputStream outputBuffer = new ByteArrayOutputStream();
DataOutputStream dataOutput = new DataOutputStream(outputBuffer);
original.write(dataOutput);
dataOutput.close();
ObservationCount newCount = new ObservationCount();
newCount.readFields( new DataInputStream( new ByteArrayInputStream(outputBuffer.toByteArray())));
return newCount;
}
@Test
public void testSerialization() throws IOException
{
count = new ObservationCount(66, 55);
assertEquals(count, cloneBySerialization(count));
}
public static void main(String args[]) {
org.junit.runner.JUnitCore.main(TestObservationCount.class.getName());
}
}