package water.fvec;
import java.util.Random;
import java.util.UUID;
import junit.framework.Assert;
import org.junit.Test;
import water.TestUtil;
public class VecStatsTest extends TestUtil {
@Test public void test() {
Random random = new Random();
Vec[] vecs = new Vec[1];
AppendableVec vec = new AppendableVec(Vec.newKey());
for( int i = 0; i < 2; i++ ) {
NewChunk chunk = new NewChunk(vec, i);
for( int r = 0; r < 1000; r++ )
chunk.addNum(random.nextInt(1000));
chunk.close(i, null);
}
vecs[0] = vec.close(null);
Frame frame = new Frame(null, vecs);
// Make sure we test the multi-chunk case
assert frame.vecs()[0].nChunks() > 1;
long rows = frame.numRows();
Vec v = frame.vecs()[0];
double min = Double.POSITIVE_INFINITY, max = Double.NEGATIVE_INFINITY, mean = 0, sigma = 0;
for( int r = 0; r < rows; r++ ) {
double d = v.at(r);
if( d < min )
min = d;
if( d > max )
max = d;
mean += d;
}
mean /= rows;
for( int r = 0; r < rows; r++ ) {
double d = v.at(r);
sigma += (d - mean) * (d - mean);
}
sigma = Math.sqrt(sigma / (rows - 1));
double epsilon = 1e-9;
Assert.assertEquals(max, v.max(), epsilon);
Assert.assertEquals(min, v.min(), epsilon);
Assert.assertEquals(mean, v.mean(), epsilon);
Assert.assertEquals(sigma, v.sigma(), epsilon);
frame.delete();
}
}