package org.yamcs.yarch;
import static org.junit.Assert.*;
import org.junit.Before;
import org.junit.Test;
import org.yamcs.utils.TimeEncoding;
public class HistogramSegmentTest {
byte[] grp1="aaaaaaa".getBytes();
byte[] grp2="b".getBytes();
private void assertSegEquals(int dstart, int dstop, short num, HistogramSegment.SegRecord p) {
assertEquals(dstart, p.dstart);
assertEquals(dstop, p.dstop);
assertEquals(num, p.num);
}
@Before
public void setUp() {
TimeEncoding.setUp();
}
@Test
public void testDuplicate1() {
HistogramSegment segment=new HistogramSegment("g1".getBytes(), 0);
segment.add((short)1, (short)10, (short)10);
segment.merge((short)10);
assertTrue(segment.duplicate);
assertFalse(segment.leftUpdated);
assertFalse(segment.centerAdded);
assertFalse(segment.rightDeleted);
assertFalse(segment.rightUpdated);
}
@Test
public void testDuplicate2() {
HistogramSegment segment=new HistogramSegment("g2".getBytes(), 0);
segment.add((short)1, (short)10, (short)10);
segment.merge((short)1);
assertTrue(segment.duplicate);
assertFalse(segment.leftUpdated);
assertFalse(segment.centerAdded);
assertFalse(segment.rightDeleted);
assertFalse(segment.rightUpdated);
}
@Test
public void testInsideLeft() {
HistogramSegment segment = new HistogramSegment("g3".getBytes(), 0);
segment.add((short)1, (short)10, (short)2);
segment.merge((short)9);
assertTrue(segment.duplicate);
assertFalse(segment.leftUpdated);
assertFalse(segment.centerAdded);
assertFalse(segment.rightDeleted);
assertFalse(segment.rightUpdated);
}
@Test
public void testMergeLeft1() {
HistogramSegment segment = new HistogramSegment("g4".getBytes(), 0);
segment.add((short)1, (short)1, (short)1);
segment.merge((short)2);
assertFalse(segment.duplicate);
assertTrue(segment.leftUpdated);
assertSegEquals((short)1, (short)2, (short)2, segment.pps.get(0));
assertFalse(segment.centerAdded);
assertFalse(segment.rightUpdated);
assertFalse(segment.rightDeleted);
}
@Test
public void testMergeLeft2() {
HistogramSegment segment = new HistogramSegment("g5".getBytes(), 0);
segment.add((short)1, (short)10, (short)10);
segment.merge((short)11);
assertFalse(segment.duplicate);
assertTrue(segment.leftUpdated);
assertSegEquals((short)1, (short)11, (short)11, segment.pps.get(0));
assertFalse(segment.centerAdded);
assertFalse(segment.rightUpdated);
assertFalse(segment.rightDeleted);
}
@Test
public void testMergeRight() {
HistogramSegment segment = new HistogramSegment("g6".getBytes(), 0);
segment.add((short)7, (short)8, (short)2);
segment.merge((short)6);
assertFalse(segment.duplicate);
assertFalse(segment.leftUpdated);
assertFalse(segment.centerAdded);
assertTrue(segment.rightUpdated);
assertSegEquals((short)6,(short)8, (short)3, segment.pps.get(0));
assertFalse(segment.rightDeleted);
}
@Test
public void testMergeBoth() {
HistogramSegment segment = new HistogramSegment("g7".getBytes(), 0);
segment.add((short)1, (short)5, (short)2);
segment.add((short)7, (short)8, (short)2);
segment.merge((short)6);
assertFalse(segment.duplicate);
assertTrue(segment.leftUpdated);
assertSegEquals((short)1, (short) 8, (short)5, segment.pps.get(0));
assertFalse(segment.centerAdded);
assertTrue(segment.rightDeleted);
}
@Test
public void testCheckStandalone1() {
HistogramSegment segment = new HistogramSegment("g8".getBytes(), 0);
segment.merge((short)11);
assertFalse(segment.duplicate);
assertFalse(segment.leftUpdated);
assertTrue(segment.centerAdded);
assertSegEquals((short)11, (short)11,(short)1, segment.pps.get(0));
assertFalse(segment.rightUpdated);
assertFalse(segment.rightDeleted);
}
@Test
public void testCheckStandalone2() {
HistogramSegment segment = new HistogramSegment("g9".getBytes(), 0);
segment.add(1000, 5000, (short)2);
segment.add(17000, 18000,(short)2);
segment.merge(11000);
assertFalse(segment.duplicate);
assertFalse(segment.leftUpdated);
assertSegEquals(1000, 5000, (short)2, segment.pps.get(0));
assertTrue(segment.centerAdded);
assertSegEquals(11000, 11000, (short)1, segment.pps.get(1));
assertFalse(segment.rightUpdated);
assertSegEquals(17000, 18000, (short)2, segment.pps.get(2));
assertFalse(segment.rightDeleted);
}
@Test
public void testSelectBestMerge() {
HistogramSegment segment = new HistogramSegment("g10".getBytes(), 0);
segment.add(1000, 4000, (short)4);
segment.add(7000, 8000,(short)2);
segment.merge(6000);
assertFalse(segment.duplicate);
assertFalse(segment.leftUpdated);
assertFalse(segment.centerAdded);
assertTrue(segment.rightUpdated);
assertSegEquals(6000, 8000, (short)3, segment.pps.get(1));
assertFalse(segment.rightDeleted);
}
}