package jtrade.test.unit;
import static jtrade.test.TestUtil.assertContains;
import static jtrade.test.TestUtil.assertEqualsArray;
import static org.testng.AssertJUnit.assertEquals;
import static org.testng.AssertJUnit.fail;
import java.util.Arrays;
import java.util.Iterator;
import jtrade.test.TestDurationWrapper;
import jtrade.util.DoubleBuffer;
import org.testng.annotations.Listeners;
import org.testng.annotations.Test;
@Listeners({ TestDurationWrapper.class })
public class TestDoubleBuffer {
@Test()
public void testDoubleBuffer() {
DoubleBuffer buf = new DoubleBuffer(2);
assertEquals(2, buf.capacity());
assertEquals(0, buf.size());
assertEquals(true, buf.isEmpty());
assertEquals(false, buf.push(1.0));
assertEquals(false, buf.push(4.0));
assertEquals(true, buf.push(2.0));
assertEquals(false, buf.offer(3.0));
assertEquals(4.0, buf.remove());
assertEquals(true, buf.offer(3.0));
assertEquals(true, buf.isFull());
assertEquals(2, buf.size());
assertEquals(2.0, buf.get(0));
assertEquals(3.0, buf.get(1));
assertEquals(2.0, buf.first());
assertEquals(3.0, buf.last());
assertEquals(false, buf.contains(1.0));
assertEquals(true, buf.contains(2.0));
assertEquals(true, buf.contains(3.0));
assertEquals(true, buf.containsAll(Arrays.asList(2.0, 3.0)));
assertEqualsArray(new double[] { 2.0, 3.0 }, buf.toArray());
assertEqualsArray(new double[] { 3.0 }, buf.toArray(1, 2));
assertEqualsArray(new Double[] { 2.0, 3.0 }, buf.toArray(new Double[2]));
assertContains(new String[] { "2.0", "3.0" }, buf.toString());
double expected = 2.0;
for (double d : buf) {
assertEquals(d, expected);
expected += 1.0;
}
try {
buf.add(10.0);
fail("add() should throw IllegalStateException");
} catch (IllegalStateException e) {
assertEquals(buf.size(), 2);
}
try {
buf.get(3);
fail("get() should throw IndexOutOfBoundsException");
} catch (IndexOutOfBoundsException e) {
}
assertEquals(3.0, buf.remove(1));
assertEquals(1, buf.size());
buf.clear();
assertEquals(0, buf.size());
assertEquals(true, buf.isEmpty());
}
@Test()
public void testDoubleBufferIterator() {
DoubleBuffer buf = new DoubleBuffer(new double[] { 1.0, 2.0, 3.0 });
assertEquals(3, buf.size());
assertEquals(true, buf.isFull());
Iterator<Double> i = buf.iterator();
assertEquals(Arrays.equals(buf.toArray(), new double[] { 1.0, 2.0, 3.0 }), true);
assertEquals(true, i.hasNext());
assertEquals(1.0, i.next().doubleValue());
i.remove();
assertEquals(Arrays.equals(buf.toArray(), new double[] { 2.0, 3.0 }), true);
assertEquals(true, i.hasNext());
assertEquals(2.0, i.next().doubleValue());
i.remove();
assertEquals(Arrays.equals(buf.toArray(), new double[] { 3.0 }), true);
assertEquals(true, i.hasNext());
assertEquals(3.0, i.next().doubleValue());
i.remove();
assertEquals(0, buf.size());
assertEquals(true, buf.isEmpty());
}
@Test()
public void testDoubleBufferStats() {
DoubleBuffer buf = new DoubleBuffer(new double[] { 2.0, 4.0, 6.0 });
assertEquals(6.0, buf.max());
assertEquals(2.0, buf.min());
assertEquals(12.0, buf.sum());
assertEquals(4.0, buf.mean());
assertEquals(4.0, buf.median());
assertEquals(2.0, buf.std());
assertEquals(4.0, buf.var());
assertEquals(2.0, buf.slope());
assertEquals(0.25, buf.percentRank(3.0));
assertEquals(0.666666666667, buf.arithReturn(), 1.0E-9);
assertEquals(1.098612288668, buf.logReturn(), 1.0E-9);
assertEquals(Arrays.equals(new double[] { 2.0, 2.0, 1.0 }, buf.lr()), true);
}
}