package water.fvec; import org.junit.*; import water.TestUtil; import java.util.Arrays; import java.util.UUID; import static org.junit.Assert.fail; public class C16ChunkTest extends TestUtil { static UUID u(long lo, long hi) { return new UUID(hi, lo);} @BeforeClass() public static void setup() { stall_till_cloudsize(1); } UUID[] sampleVals = new UUID[]{ u(6, 6), u(C16Chunk._LO_NA, C16Chunk._HI_NA + 1), u(C16Chunk._LO_NA, C16Chunk._HI_NA - 1), u(C16Chunk._LO_NA+1, C16Chunk._HI_NA), u(C16Chunk._LO_NA-1, C16Chunk._HI_NA), u(Long.MIN_VALUE+1, 0), u(Long.MIN_VALUE+1, 1L), u(Long.MIN_VALUE+1, -1L), u(Long.MIN_VALUE+1, Long.MIN_VALUE+1), u(0L, Long.MIN_VALUE+1), u(1L, Long.MIN_VALUE+1), u(-1L, Long.MIN_VALUE+1), u(Long.MAX_VALUE-1, 0), u(Long.MAX_VALUE-1, 1L), u(Long.MAX_VALUE-1, -1L), u(0L, Long.MAX_VALUE-1), u(1L, Long.MAX_VALUE-1), u(-1L, Long.MAX_VALUE-1), u(Long.MAX_VALUE-1, Long.MAX_VALUE-1), u(Long.MAX_VALUE, 0), u(Long.MAX_VALUE, 1L), u(Long.MAX_VALUE, -1L), u(0L, Long.MAX_VALUE), u(1L, Long.MAX_VALUE), u(-1L, Long.MAX_VALUE), u(Long.MAX_VALUE, Long.MAX_VALUE), u(0L, 0), u(0L, 1L), u(0L, -1L), u(1L, 0L), u(-1L, 0L), u(1L, 0L), u(1, 1L), u(1, -1L), u(-1L, 1L), u(12312421425L, 12312421426L), u(23523523423L, 23523523424L), u(-823048234L, -823048235L), u(-123123L, -123124L)}; NewChunk buildTestData(boolean withNA) { NewChunk nc = new NewChunk(null, 0); if (withNA) nc.addNA(); for (UUID u : sampleVals) nc.addUUID(u.getLeastSignificantBits(), u.getMostSignificantBits()); nc.addNA(); return nc; } @Test public void test_inflate_impl() { for (int l=0; l<2; ++l) { boolean haveNA = l == 1; NewChunk nc = buildTestData(haveNA); int len = nc.len(); Chunk cc = nc.compress(); Assert.assertEquals(sampleVals.length + 1 + l, cc._len); Assert.assertTrue(cc instanceof C16Chunk); checkChunk(cc, l, haveNA); nc = cc.extractRows(new NewChunk(null, 0),0,len); Assert.assertEquals(sampleVals.length + 1 + l, nc._len); checkChunk(nc, l, haveNA); Chunk cc2 = nc.compress(); Assert.assertEquals(sampleVals.length + 1 + l, cc._len); Assert.assertTrue(cc2 instanceof C16Chunk); checkChunk(cc2, l, haveNA); Assert.assertTrue(Arrays.equals(cc._mem, cc2._mem)); } } @Test public void test_illegal_values() { Chunk cc = buildTestData(false).compress(); try { cc.set_impl(4, C16Chunk._LO_NA, C16Chunk._HI_NA); fail("Expected a failure on adding an illegal value"); } catch(IllegalArgumentException iae) { // as expected } } private UUID uuidAt(Chunk cc, int i) { return u(cc.at16l(i), cc.at16h(i)); } private void checkChunk(Chunk cc, int l, boolean haveNA) { if (haveNA) Assert.assertTrue(cc.isNA(0)); if (haveNA) Assert.assertTrue(cc.isNA_abs(0)); for (int i = 0; i < sampleVals.length; ++i) { UUID expected = sampleVals[i]; long expectedLo = expected.getLeastSignificantBits(); long expectedHi = expected.getMostSignificantBits(); Assert.assertEquals(expectedLo, cc.at16l(l + i)); Assert.assertEquals(expectedLo, cc.at16l_abs(l + i)); Assert.assertEquals(expectedHi, cc.at16h(l + i)); Assert.assertEquals(expectedHi, cc.at16h_abs(l + i)); } Assert.assertTrue(cc.isNA(sampleVals.length + l)); Assert.assertTrue(cc.isNA_abs(sampleVals.length + l)); } }