@Test public void emptyUnionSerDeIssue195() { DoublesUnion union = DoublesUnion.builder().build(); byte[] byteArr = union.toByteArray(); Memory mem = Memory.wrap(byteArr); DoublesUnion union2 = DoublesUnion.heapify(mem); Assert.assertEquals(mem.getCapacity(), 8L); Assert.assertTrue(union2.isEmpty()); }
@Test public void differentEmptySmallerKDirect() { final int k128 = 128; final int k64 = 64; final DoublesUnion union = DoublesUnion.builder().setMaxK(k128).build(); assertTrue(union.isEmpty()); //gadget is null Assert.assertFalse(union.isDirect()); // byte[] unionByteArr = union.toByteArray(); // Assert.assertEquals(unionByteArr.length, 32 + 32); //empty final UpdateDoublesSketch sketch1 = buildAndLoadDQS(k64, 0); //build smaller empty sketch union.update(sketch1); assertTrue(union.isEmpty()); //gadget is valid Assert.assertFalse(union.isDirect()); // unionByteArr = union.toByteArray(); // int udBytes = DoublesSketch.getUpdatableStorageBytes(k64, 0); // Assert.assertEquals(unionByteArr.length, udBytes); //empty Assert.assertEquals(union.getResult().getK(), 128); sketch1.update(1.0); union.update(sketch1); Assert.assertEquals(union.getResult().getK(), 128); }
@Test public void differentEmptySmallerK() { final int k128 = 128; final int k64 = 64; final DoublesUnion union = DoublesUnion.builder().setMaxK(k128).build(); assertTrue(union.isEmpty()); //gadget is null Assert.assertFalse(union.isDirect()); // byte[] unionByteArr = union.toByteArray(); // Assert.assertEquals(unionByteArr.length, 32 + 32); //empty final UpdateDoublesSketch sketch1 = buildAndLoadQS(k64, 0); //build smaller empty sketch union.update(sketch1); assertTrue(union.isEmpty()); //gadget is valid Assert.assertFalse(union.isDirect()); // unionByteArr = union.toByteArray(); // int udBytes = DoublesSketch.getUpdatableStorageBytes(k64, 0); // Assert.assertEquals(unionByteArr.length, udBytes); //empty Assert.assertEquals(union.getResult().getK(), 128); sketch1.update(1.0); union.update(sketch1); Assert.assertEquals(union.getResult().getK(), 128); }
@Test public void checkDirectInstance() { final int k = 128; final int n = 1000; final DoublesUnionBuilder bldr = DoublesUnion.builder(); bldr.setMaxK(k); Assert.assertEquals(bldr.getMaxK(), k); final int bytes = DoublesSketch.getUpdatableStorageBytes(k, n); final byte[] byteArr = new byte[bytes]; final WritableMemory mem = WritableMemory.wrap(byteArr); final DoublesUnion union = bldr.build(mem); assertTrue(union.isEmpty()); assertTrue(union.isDirect()); for (int i = 1; i <= n; i++) { union.update(i); } Assert.assertFalse(union.isEmpty()); final DoublesSketch res = union.getResult(); final double median = res.getQuantile(.5); Assert.assertEquals(median, 500, 10); println(union.toString()); }
@Test public void checkWrapInstance() { final int k = 128; final int n = 1000; final UpdateDoublesSketch sketch = DoublesSketch.builder().setK(k).build(); for (int i = 1; i <= n; i++) { sketch.update(i); } final double skMedian = sketch.getQuantile(.5); Assert.assertEquals(skMedian, 500, 10); final byte[] byteArr = sketch.toByteArray(false); final WritableMemory mem = WritableMemory.wrap(byteArr); final DoublesUnion union = DoublesUnion.wrap(mem); Assert.assertFalse(union.isEmpty()); assertTrue(union.isDirect()); final DoublesSketch sketch2 = union.getResult(); final double uMedian = sketch2.getQuantile(0.5); Assert.assertEquals(skMedian, uMedian, 0.0); // check serializing again final byte[] bytesOut = union.toByteArray(); assertEquals(bytesOut.length, byteArr.length); assertEquals(bytesOut, byteArr); // wrapped, so should be exact }