package water.fvec; import org.junit.Assert; import org.junit.BeforeClass; import org.junit.Test; import water.AutoBuffer; import water.IcedUtils; import water.TestUtil; import java.util.Arrays; public class CUDChunkTest extends TestUtil { @BeforeClass() public static void setup() { stall_till_cloudsize(1); } @Test public void test_inflate_impl() { NewChunk nc = new NewChunk(null, 0); final double a = -3.1415926e-118; final double b = 23423423.234234234; final double c = 0.00103E217; double[] vals = new double[]{ Double.NaN, Double.MIN_VALUE, Double.POSITIVE_INFINITY, Double.NEGATIVE_INFINITY, a, 0, b, c, Double.MAX_VALUE, Double.NaN, Double.MIN_VALUE, Double.POSITIVE_INFINITY, Double.NEGATIVE_INFINITY, a, 0, b, c, Double.MAX_VALUE, Double.NaN, Double.MIN_VALUE, Double.POSITIVE_INFINITY, Double.NEGATIVE_INFINITY, a, 0, b, c, Double.MAX_VALUE, a, Double.NaN, Double.MIN_VALUE, Double.POSITIVE_INFINITY, Double.NEGATIVE_INFINITY, a, 0, b, c, Double.MAX_VALUE, Double.NaN, Double.MIN_VALUE, Double.POSITIVE_INFINITY, Double.NEGATIVE_INFINITY, a, 0, b, c, Double.MAX_VALUE, Double.NaN, b, Double.MIN_VALUE, Double.POSITIVE_INFINITY, Double.NEGATIVE_INFINITY, a, 0, b, c, Double.MAX_VALUE, Double.NaN, Double.MIN_VALUE, Double.POSITIVE_INFINITY, Double.NEGATIVE_INFINITY, a, 0, b, c, Double.MAX_VALUE, Double.NaN, Double.MIN_VALUE, c, Double.POSITIVE_INFINITY, Double.NEGATIVE_INFINITY, a, 0, b, c, Double.MAX_VALUE, Double.NaN, Double.MIN_VALUE, Double.POSITIVE_INFINITY, Double.NEGATIVE_INFINITY, a, 0, b, c, Double.MAX_VALUE, Double.NaN, Double.MIN_VALUE, Double.POSITIVE_INFINITY, Double.NEGATIVE_INFINITY, a, a, 0, b, c, Double.MAX_VALUE, Double.NaN, b, Double.MIN_VALUE, Double.POSITIVE_INFINITY, Double.NEGATIVE_INFINITY, a, 0, b, c, Double.MAX_VALUE, Double.NaN, Double.MIN_VALUE, Double.POSITIVE_INFINITY, Double.NEGATIVE_INFINITY, a, 0, b, c, Double.MAX_VALUE, Double.NaN, Double.MIN_VALUE, Double.POSITIVE_INFINITY, Double.NEGATIVE_INFINITY, a, 0, b, c, Double.MAX_VALUE, Double.NaN, Double.MIN_VALUE, Double.POSITIVE_INFINITY, Double.NEGATIVE_INFINITY, a, 0, b, c, Double.MAX_VALUE, Double.NaN, Double.MIN_VALUE, Double.POSITIVE_INFINITY, Double.NEGATIVE_INFINITY, a, 0, b, c, Double.MAX_VALUE, Double.NaN, Double.MIN_VALUE, Double.POSITIVE_INFINITY, Double.NEGATIVE_INFINITY, a, 0, b, c, Double.MAX_VALUE, }; for (double v : vals) nc.addNum(v); nc.addNA(); int len = nc.len(); Chunk cc = nc.compress(); Assert.assertEquals(vals.length + 1, cc._len); Assert.assertTrue(cc instanceof CUDChunk); for (int i = 0; i < vals.length; ++i) Assert.assertEquals(vals[i], cc.atd(i), Math.ulp(vals[i])); for (int i = 0; i < vals.length; ++i) Assert.assertEquals(vals[i], cc.at_abs(i), Math.ulp(vals[i])); Assert.assertTrue(cc.isNA(vals.length)); Assert.assertTrue(cc.isNA_abs(vals.length)); Chunk cc2 = IcedUtils.deepCopy(cc); Assert.assertEquals(cc._len, cc2._len); Assert.assertEquals(vals.length + 1, cc2._len); Assert.assertTrue(cc2 instanceof CUDChunk); for (int i = 0; i < vals.length; ++i) Assert.assertEquals(vals[i], cc2.atd(i), Math.ulp(vals[i])); for (int i = 0; i < vals.length; ++i) Assert.assertEquals(vals[i], cc2.at_abs(i), Math.ulp(vals[i])); Assert.assertTrue(cc2.isNA(vals.length)); Assert.assertTrue(cc2.isNA_abs(vals.length)); // randomly writing one of the unique values is fine cc.set_impl(vals.length-1, a); Assert.assertTrue(cc.atd(vals.length - 1) == a); vals[vals.length-1]=a; nc = cc.extractRows(new NewChunk(null, 0),0,len); Assert.assertEquals(vals.length + 1, nc._len); for (int i = 0; i < vals.length; ++i) Assert.assertEquals(vals[i], nc.atd(i), Math.ulp(vals[i])); for (int i = 0; i < vals.length; ++i) Assert.assertEquals(vals[i], nc.at_abs(i), Math.ulp(vals[i])); Assert.assertTrue(nc.isNA(vals.length)); Assert.assertTrue(nc.isNA_abs(vals.length)); cc2 = nc.compress(); Assert.assertEquals(vals.length + 1, cc._len); Assert.assertTrue(cc2 instanceof CUDChunk); for (int i = 0; i < vals.length; ++i) Assert.assertEquals(vals[i], cc2.atd(i), Math.ulp(vals[i])); for (int i = 0; i < vals.length; ++i) Assert.assertEquals(vals[i], cc2.at_abs(i), Math.ulp(vals[i])); Assert.assertTrue(cc2.isNA(vals.length)); Assert.assertTrue(cc2.isNA_abs(vals.length)); Assert.assertTrue(Arrays.equals(cc._mem, cc2._mem)); } }