package jtrade.test.unit;
import static org.testng.AssertJUnit.assertEquals;
import java.util.Random;
import jtrade.marketfeed.Cleaner;
import jtrade.marketfeed.MedianCleaner;
import jtrade.test.TestDurationWrapper;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Listeners;
import org.testng.annotations.Test;
@Listeners({ TestDurationWrapper.class })
public class TestCleaner {
public static double[] randomWalk(int len, double initial, double drift, double volatility, long seed) {
Random rnd = new Random(seed);
double[] data = new double[len];
data[0] = initial;
for (int i = 1; i < len; i++) {
data[i] = data[i - 1] + data[i - 1] * drift + (rnd.nextGaussian() * volatility);
}
return data;
}
@BeforeClass
public void setUp() {
}
@Test()
public void testMedianCleaner() {
double[] values = randomWalk(1000, 100.0, 0.0001, 1.0, 1);
Cleaner cleaner = new MedianCleaner(480, 6.0);
values[500] *= 0.95;
values[700] *= 0.95;
for (int i = 0; i < values.length; i++) {
double value = cleaner.update(i * 1000 * 60, values[i]);
//System.out.println(values[i] + " = " + value);
values[i] = value;
}
assertEquals(Double.NaN, values[500]);
assertEquals(Double.NaN, values[700]);
}
}