Added:
dev/datasketches/memory/2.2.0-RC1/apache-datasketches-memory-2.2.0-src/datasketches-memory-java8/src/test/java/org/apache/datasketches/memory/internal/WritableDirectCopyTest.java
==============================================================================
---
dev/datasketches/memory/2.2.0-RC1/apache-datasketches-memory-2.2.0-src/datasketches-memory-java8/src/test/java/org/apache/datasketches/memory/internal/WritableDirectCopyTest.java
(added)
+++
dev/datasketches/memory/2.2.0-RC1/apache-datasketches-memory-2.2.0-src/datasketches-memory-java8/src/test/java/org/apache/datasketches/memory/internal/WritableDirectCopyTest.java
Tue May 21 21:11:49 2024
@@ -0,0 +1,253 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.datasketches.memory.internal;
+
+import static org.testng.Assert.assertEquals;
+import static org.testng.Assert.fail;
+
+import org.apache.datasketches.memory.WritableHandle;
+import org.apache.datasketches.memory.Memory;
+import org.apache.datasketches.memory.WritableMemory;
+import org.testng.annotations.Test;
+
+/**
+ * @author Lee Rhodes
+ */
+public class WritableDirectCopyTest {
+
+//Copy Within tests
+
+ @Test
+ public void checkCopyWithinNativeSmall() throws Exception {
+ int memCapacity = 64;
+ int half = memCapacity / 2;
+ try (WritableHandle wrh = WritableMemory.allocateDirect(memCapacity)) {
+ WritableMemory mem = wrh.getWritable();
+ mem.clear();
+
+ for (int i = 0; i < half; i++) { //fill first half
+ mem.putByte(i, (byte) i);
+ }
+
+ mem.copyTo(0, mem, half, half);
+
+ for (int i = 0; i < half; i++) {
+ assertEquals(mem.getByte(i + half), (byte) i);
+ }
+ }
+ }
+
+ @Test
+ public void checkCopyWithinNativeLarge() throws Exception {
+ int memCapacity = (2 << 20) + 64;
+ int memCapLongs = memCapacity / 8;
+ int halfBytes = memCapacity / 2;
+ int halfLongs = memCapLongs / 2;
+ try (WritableHandle wrh = WritableMemory.allocateDirect(memCapacity)) {
+ WritableMemory mem = wrh.getWritable();
+ mem.clear();
+
+ for (int i = 0; i < halfLongs; i++) {
+ mem.putLong(i * 8, i);
+ }
+
+ mem.copyTo(0, mem, halfBytes, halfBytes);
+
+ for (int i = 0; i < halfLongs; i++) {
+ assertEquals(mem.getLong((i + halfLongs) * 8), i);
+ }
+ }
+ }
+
+ @Test
+ public void checkCopyWithinNativeOverlap() throws Exception {
+ int memCapacity = 64;
+ try (WritableHandle wrh = WritableMemory.allocateDirect(memCapacity)) {
+ WritableMemory mem = wrh.getWritable();
+ mem.clear();
+ //println(mem.toHexString("Clear 64", 0, memCapacity));
+
+ for (int i = 0; i < (memCapacity / 2); i++) {
+ mem.putByte(i, (byte) i);
+ }
+ //println(mem.toHexString("Set 1st 32 to ints ", 0, memCapacity));
+ mem.copyTo(0, mem, memCapacity / 4, memCapacity / 2); //overlap is OK
+ }
+ }
+
+ @Test
+ public void checkCopyWithinNativeSrcBound() throws Exception {
+ int memCapacity = 64;
+ try (WritableHandle wrh = WritableMemory.allocateDirect(memCapacity)) {
+ WritableMemory mem = wrh.getWritable();
+ mem.copyTo(32, mem, 32, 33); //hit source bound check
+ fail("Did Not Catch Assertion Error: source bound");
+ } catch (IllegalArgumentException e) {
+ //pass
+ }
+ }
+
+ @Test
+ public void checkCopyWithinNativeDstBound() throws Exception {
+ int memCapacity = 64;
+ try (WritableHandle wrh = WritableMemory.allocateDirect(memCapacity)) {
+ WritableMemory mem = wrh.getWritable();
+ mem.copyTo(0, mem, 32, 33); //hit dst bound check
+ fail("Did Not Catch Assertion Error: dst bound");
+ } catch (IllegalArgumentException e) {
+ //pass
+ }
+ }
+
+ @Test
+ public void checkCopyCrossNativeSmall() throws Exception {
+ int memCapacity = 64;
+
+ try (WritableHandle wrh1 = WritableMemory.allocateDirect(memCapacity);
+ WritableHandle wrh2 = WritableMemory.allocateDirect(memCapacity)) {
+ WritableMemory mem1 = wrh1.getWritable();
+ WritableMemory mem2 = wrh2.getWritable();
+
+ for (int i = 0; i < memCapacity; i++) {
+ mem1.putByte(i, (byte) i);
+ }
+ mem2.clear();
+ mem1.copyTo(0, mem2, 0, memCapacity);
+
+ for (int i = 0; i < memCapacity; i++) {
+ assertEquals(mem2.getByte(i), (byte) i);
+ }
+ wrh1.close();
+ wrh2.close();
+ }
+ }
+
+ @Test
+ public void checkCopyCrossNativeLarge() throws Exception {
+ int memCapacity = (2 << 20) + 64;
+ int memCapLongs = memCapacity / 8;
+
+ try (WritableHandle wrh1 = WritableMemory.allocateDirect(memCapacity);
+ WritableHandle wrh2 = WritableMemory.allocateDirect(memCapacity)) {
+ WritableMemory mem1 = wrh1.getWritable();
+ WritableMemory mem2 = wrh2.getWritable();
+
+ for (int i = 0; i < memCapLongs; i++) {
+ mem1.putLong(i * 8, i);
+ }
+ mem2.clear();
+
+ mem1.copyTo(0, mem2, 0, memCapacity);
+
+ for (int i = 0; i < memCapLongs; i++) {
+ assertEquals(mem2.getLong(i * 8), i);
+ }
+ }
+ }
+
+ @Test
+ public void checkCopyCrossNativeAndByteArray() throws Exception {
+ int memCapacity = 64;
+ try (WritableHandle wrh1 = WritableMemory.allocateDirect(memCapacity)) {
+ WritableMemory mem1 = wrh1.getWritable();
+
+ for (int i = 0; i < mem1.getCapacity(); i++) {
+ mem1.putByte(i, (byte) i);
+ }
+
+ WritableMemory mem2 = WritableMemory.allocate(memCapacity);
+ mem1.copyTo(8, mem2, 16, 16);
+
+ for (int i = 0; i < 16; i++) {
+ assertEquals(mem1.getByte(8 + i), mem2.getByte(16 + i));
+ }
+ //println(mem2.toHexString("Mem2", 0, (int)mem2.getCapacity()));
+ }
+ }
+
+ @Test
+ public void checkCopyCrossRegionsSameNative() throws Exception {
+ int memCapacity = 128;
+
+ try (WritableHandle wrh1 = WritableMemory.allocateDirect(memCapacity)) {
+ WritableMemory mem1 = wrh1.getWritable();
+
+ for (int i = 0; i < mem1.getCapacity(); i++) {
+ mem1.putByte(i, (byte) i);
+ }
+ //println(mem1.toHexString("Mem1", 0, (int)mem1.getCapacity()));
+
+ Memory reg1 = mem1.region(8, 16);
+ //println(reg1.toHexString("Reg1", 0, (int)reg1.getCapacity()));
+
+ WritableMemory reg2 = mem1.writableRegion(24, 16);
+ //println(reg2.toHexString("Reg2", 0, (int)reg2.getCapacity()));
+ reg1.copyTo(0, reg2, 0, 16);
+
+ for (int i = 0; i < 16; i++) {
+ assertEquals(reg1.getByte(i), reg2.getByte(i));
+ assertEquals(mem1.getByte(8 + i), mem1.getByte(24 + i));
+ }
+ //println(mem1.toHexString("Mem1", 0, (int)mem1.getCapacity()));
+ }
+ }
+
+ @Test
+ public void checkCopyCrossNativeArrayAndHierarchicalRegions() throws
Exception {
+ int memCapacity = 64;
+ try (WritableHandle wrh1 = WritableMemory.allocateDirect(memCapacity)) {
+ WritableMemory mem1 = wrh1.getWritable();
+
+ for (int i = 0; i < mem1.getCapacity(); i++) { //fill with numbers
+ mem1.putByte(i, (byte) i);
+ }
+ //println(mem1.toHexString("Mem1", 0, (int)mem1.getCapacity()));
+
+ WritableMemory mem2 = WritableMemory.allocate(memCapacity);
+
+ Memory reg1 = mem1.region(8, 32);
+ Memory reg1B = reg1.region(8, 16);
+ //println(reg1.toHexString("Reg1", 0, (int)reg1.getCapacity()));
+ //println(reg1B.toHexString("Reg1B", 0, (int)reg1B.getCapacity()));
+
+ WritableMemory reg2 = mem2.writableRegion(32, 16);
+ reg1B.copyTo(0, reg2, 0, 16);
+ //println(reg2.toHexString("Reg2", 0, (int)reg2.getCapacity()));
+
+ //println(mem2.toHexString("Mem2", 0, (int)mem2.getCapacity()));
+ for (int i = 32, j = 16; i < 40; i++, j++) {
+ assertEquals(mem2.getByte(i), j);
+ }
+ }
+ }
+
+ @Test
+ public void printlnTest() {
+ println("PRINTING: " + this.getClass().getName());
+ }
+
+ /**
+ * @param s value to print
+ */
+ static void println(String s) {
+ //System.out.println(s); //disable here
+ }
+
+}
Propchange:
dev/datasketches/memory/2.2.0-RC1/apache-datasketches-memory-2.2.0-src/datasketches-memory-java8/src/test/java/org/apache/datasketches/memory/internal/WritableDirectCopyTest.java
------------------------------------------------------------------------------
svn:executable = *
Added:
dev/datasketches/memory/2.2.0-RC1/apache-datasketches-memory-2.2.0-src/datasketches-memory-java8/src/test/java/org/apache/datasketches/memory/internal/WritableMemoryTest.java
==============================================================================
---
dev/datasketches/memory/2.2.0-RC1/apache-datasketches-memory-2.2.0-src/datasketches-memory-java8/src/test/java/org/apache/datasketches/memory/internal/WritableMemoryTest.java
(added)
+++
dev/datasketches/memory/2.2.0-RC1/apache-datasketches-memory-2.2.0-src/datasketches-memory-java8/src/test/java/org/apache/datasketches/memory/internal/WritableMemoryTest.java
Tue May 21 21:11:49 2024
@@ -0,0 +1,198 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.datasketches.memory.internal;
+
+import static org.testng.Assert.assertEquals;
+import static org.testng.Assert.assertFalse;
+import static org.testng.Assert.assertTrue;
+
+import java.nio.ByteBuffer;
+import java.nio.ByteOrder;
+import java.util.concurrent.ThreadLocalRandom;
+
+import org.apache.datasketches.memory.Memory;
+import org.apache.datasketches.memory.WritableBuffer;
+import org.apache.datasketches.memory.WritableMemory;
+import org.testng.annotations.Test;
+
+public class WritableMemoryTest {
+
+ @Test
+ public void wrapBigEndian() {
+ ByteBuffer bb = ByteBuffer.allocate(64); //big endian
+ WritableMemory wmem = WritableMemory.writableWrap(bb);
+ assertEquals(wmem.getTypeByteOrder(), ByteOrder.BIG_ENDIAN);
+ wmem = WritableMemory.writableWrap(bb, ByteOrder.nativeOrder());
+ assertEquals(wmem.getTypeByteOrder(), ByteOrder.LITTLE_ENDIAN);
+ }
+
+ @Test
+ public void wrapBigEndianAsLittle() {
+ ByteBuffer bb = ByteBuffer.allocate(64);
+ bb.putChar(0, (char)1); //as NNO
+ WritableMemory wmem = WritableMemory.writableWrap(bb,
ByteOrder.LITTLE_ENDIAN, null);
+ assertEquals(wmem.getChar(0), 256);
+ }
+
+ @Test
+ public void allocateWithByteOrder() {
+ WritableMemory wmem = WritableMemory.allocate(64, ByteOrder.BIG_ENDIAN);
+ assertEquals(wmem.getTypeByteOrder(), ByteOrder.BIG_ENDIAN);
+ wmem = WritableMemory.allocate(64, ByteOrder.LITTLE_ENDIAN);
+ assertEquals(wmem.getTypeByteOrder(), ByteOrder.LITTLE_ENDIAN);
+ wmem = WritableMemory.writableWrap(new byte[64], 32, 32,
ByteOrder.BIG_ENDIAN);
+ assertEquals(wmem.getTypeByteOrder(), ByteOrder.BIG_ENDIAN);
+ }
+
+ @Test
+ public void checkGetArray() {
+ byte[] byteArr = new byte[64];
+ WritableMemory wmem = WritableMemory.writableWrap(byteArr);
+ assertTrue(wmem.getArray() == byteArr);
+ WritableBuffer wbuf = wmem.asWritableBuffer();
+ assertTrue(wbuf.getArray() == byteArr);
+ }
+
+ @Test(expectedExceptions = IllegalArgumentException.class)
+ public void checkSelfArrayCopy() {
+ byte[] srcAndDst = new byte[128];
+ WritableMemory wmem = WritableMemory.writableWrap(srcAndDst);
+ wmem.getByteArray(0, srcAndDst, 64, 64); //non-overlapping
+ }
+
+ @Test
+ public void checkEquals() {
+ int len = 7;
+ WritableMemory wmem1 = WritableMemory.allocate(len);
+ //@SuppressWarnings({"EqualsWithItself", "SelfEquals"}) //unsupported
+ //SelfEquals for Plexus, EqualsWithItself for IntelliJ
+ //boolean eq1 = wmem1.equals(wmem1); //strict profile complains
+ //assertTrue(eq1);
+
+ WritableMemory wmem2 = WritableMemory.allocate(len + 1);
+ assertFalse(wmem1.equals(wmem2));
+
+ WritableMemory reg1 = wmem1.writableRegion(0, wmem1.getCapacity());
+ assertTrue(wmem1.equals(reg1));
+
+ wmem2 = WritableMemory.allocate(len);
+ for (int i = 0; i < len; i++) {
+ wmem1.putByte(i, (byte) i);
+ wmem2.putByte(i, (byte) i);
+ }
+ assertTrue(wmem1.equals(wmem2));
+ assertTrue(wmem1.equalTo(0, wmem1, 0, len));
+
+ reg1 = wmem1.writableRegion(0, wmem1.getCapacity());
+ assertTrue(wmem1.equalTo(0, reg1, 0, len));
+
+ len = 24;
+ wmem1 = WritableMemory.allocate(len);
+ wmem2 = WritableMemory.allocate(len);
+ for (int i = 0; i < len; i++) {
+ wmem1.putByte(i, (byte) i);
+ wmem2.putByte(i, (byte) i);
+ }
+ assertTrue(wmem1.equalTo(0, wmem2, 0, len - 1));
+ assertTrue(wmem1.equalTo(0, wmem2, 0, len));
+ wmem2.putByte(0, (byte) 10);
+ assertFalse(wmem1.equalTo(0, wmem2, 0, len));
+ wmem2.putByte(0, (byte) 0);
+ wmem2.putByte(len - 2, (byte) 0);
+ assertFalse(wmem1.equalTo(0, wmem2, 0, len - 1));
+ }
+
+ @Test
+ public void checkEquals2() {
+ int len = 23;
+ WritableMemory wmem1 = WritableMemory.allocate(len);
+ assertFalse(wmem1.equals(null));
+ //@SuppressWarnings({"EqualsWithItself", "SelfEquals"}) //unsupported
+ //SelfEquals for Plexus, EqualsWithItself for IntelliJ
+ //boolean eq1 = wmem1.equals(wmem1); //strict profile complains
+ //assertTrue(eq1);
+
+ WritableMemory wmem2 = WritableMemory.allocate(len + 1);
+ assertFalse(wmem1.equals(wmem2));
+
+ for (int i = 0; i < len; i++) {
+ wmem1.putByte(i, (byte) i);
+ wmem2.putByte(i, (byte) i);
+ }
+ assertTrue(wmem1.equalTo(0, wmem2, 0, len));
+ assertTrue(wmem1.equalTo(1, wmem2, 1, len - 1));
+ }
+
+ @Test
+ public void checkLargeEquals() {
+ // Size bigger than UNSAFE_COPY_MEMORY_THRESHOLD; size with "reminder" =
7, to test several
+ // traits of the implementation
+ final int thresh = Util.UNSAFE_COPY_THRESHOLD_BYTES;
+ byte[] bytes1 = new byte[(thresh * 2) + 7];
+ ThreadLocalRandom.current().nextBytes(bytes1);
+ byte[] bytes2 = bytes1.clone();
+ Memory mem1 = Memory.wrap(bytes1);
+ Memory mem2 = Memory.wrap(bytes2);
+ assertTrue(mem1.equals(mem2));
+
+ bytes2[thresh + 10] = (byte) (bytes1[thresh + 10] + 1);
+ assertFalse(mem1.equals(mem2));
+
+ bytes2[thresh + 10] = bytes1[thresh + 10];
+ bytes2[(thresh * 2) + 3] = (byte) (bytes1[(thresh * 2) + 3] + 1);
+ assertFalse(mem1.equals(mem2));
+ }
+
+ @Test
+ public void checkWrapWithBO() {
+ WritableMemory wmem = WritableMemory.writableWrap(new byte[0],
ByteOrder.BIG_ENDIAN);
+ boolean nativeBO = wmem.getTypeByteOrder() == ByteOrder.nativeOrder();
+ assertFalse(nativeBO);
+ println("" + nativeBO);
+ wmem = WritableMemory.writableWrap(new byte[8], ByteOrder.BIG_ENDIAN);
+ nativeBO = wmem.getTypeByteOrder() == ByteOrder.nativeOrder();
+ assertFalse(nativeBO);
+ println("" + nativeBO);
+ }
+
+ @Test
+ @SuppressWarnings("unused")
+ public void checkOwnerClientCase() {
+ WritableMemory owner = WritableMemory.allocate(64);
+ Memory client1 = owner; //Client1 cannot write (no API)
+ owner.putInt(0, 1); //But owner can write
+ ((WritableMemory)client1).putInt(0, 2); //Client1 can write, but with
explicit effort.
+ Memory client2 = owner.region(0, owner.getCapacity()); //client2 cannot
write (no API)
+ owner.putInt(0, 3); //But Owner should be able to write
+ }
+
+ @Test
+ public void printlnTest() {
+ println("PRINTING: "+this.getClass().getName());
+ }
+
+ /**
+ * @param s value to print
+ */
+ static void println(final String s) {
+ //System.out.println(s);
+ }
+
+}
Propchange:
dev/datasketches/memory/2.2.0-RC1/apache-datasketches-memory-2.2.0-src/datasketches-memory-java8/src/test/java/org/apache/datasketches/memory/internal/WritableMemoryTest.java
------------------------------------------------------------------------------
svn:executable = *
Added:
dev/datasketches/memory/2.2.0-RC1/apache-datasketches-memory-2.2.0-src/datasketches-memory-java8/src/test/java/org/apache/datasketches/memory/internal/XxHash64LoopingTest.java
==============================================================================
---
dev/datasketches/memory/2.2.0-RC1/apache-datasketches-memory-2.2.0-src/datasketches-memory-java8/src/test/java/org/apache/datasketches/memory/internal/XxHash64LoopingTest.java
(added)
+++
dev/datasketches/memory/2.2.0-RC1/apache-datasketches-memory-2.2.0-src/datasketches-memory-java8/src/test/java/org/apache/datasketches/memory/internal/XxHash64LoopingTest.java
Tue May 21 21:11:49 2024
@@ -0,0 +1,1082 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.datasketches.memory.internal;
+
+import static org.testng.Assert.assertEquals;
+
+import org.apache.datasketches.memory.WritableMemory;
+import org.testng.annotations.Test;
+
+/**
+ * @author Lee Rhodes
+ */
+public class XxHash64LoopingTest {
+
+ /*
+ * This test is adapted from
+ * <a
href="https://github.com/OpenHFT/Zero-Allocation-Hashing/blob/master/src/test/java/net/openhft/hashing/XxHashTest.java">
+ * OpenHFT/Zero-Allocation-Hashing</a> to test hash compatibility with that
implementation.
+ * See LICENSE.
+ */
+ @Test
+ public void testWithSeed() {
+ long seed = 42L;
+ for (int i = 0; i < 1025; i++) {
+ byte[] byteArr = new byte[i];
+ for (int j = 0; j < byteArr.length; j++) { byteArr[j] = (byte) j; }
+ WritableMemory wmem = WritableMemory.writableWrap(byteArr);
+ long hash = wmem.xxHash64(0, byteArr.length, seed);
+ assertEquals(hash, HASHES_OF_LOOPING_BYTES_WITH_SEED_42[i]);
+ }
+ }
+
+ /*This data is from
+ * <a
href="https://github.com/OpenHFT/Zero-Allocation-Hashing/blob/master/src/test/java/net/openhft/hashing/XxHashTest.java">
+ * OpenHFT/Zero-Allocation-Hashing</a> to test hash compatibility with that
implementation.
+ * See LICENSE.
+ */
+ private static final long[] HASHES_OF_LOOPING_BYTES_WITH_SEED_42 = {
+ -7444071767201028348L,
+ -8959994473701255385L,
+ 7116559933691734543L,
+ 6019482000716350659L,
+ -6625277557348586272L,
+ -5507563483608914162L,
+ 1540412690865189709L,
+ 4522324563441226749L,
+ -7143238906056518746L,
+ -7989831429045113014L,
+ -7103973673268129917L,
+ -2319060423616348937L,
+ -7576144055863289344L,
+ -8903544572546912743L,
+ 6376815151655939880L,
+ 5913754614426879871L,
+ 6466567997237536608L,
+ -869838547529805462L,
+ -2416009472486582019L,
+ -3059673981515537339L,
+ 4211239092494362041L,
+ 1414635639471257331L,
+ 166863084165354636L,
+ -3761330575439628223L,
+ 3524931906845391329L,
+ 6070229753198168844L,
+ -3740381894759773016L,
+ -1268276809699008557L,
+ 1518581707938531581L,
+ 7988048690914090770L,
+ -4510281763783422346L,
+ -8988936099728967847L,
+ -8644129751861931918L,
+ 2046936095001747419L,
+ 339737284852751748L,
+ -8493525091666023417L,
+ -3962890767051635164L,
+ -5799948707353228709L,
+ -6503577434416464161L,
+ 7718729912902936653L,
+ 191197390694726650L,
+ -2677870679247057207L,
+ 20411540801847004L,
+ 2738354376741059902L,
+ -3754251900675510347L,
+ -3208495075154651980L,
+ 5505877218642938179L,
+ 6710910171520780908L,
+ -9060809096139575515L,
+ 6936438027860748388L,
+ -6675099569841255629L,
+ -5358120966884144380L,
+ -4970515091611332076L,
+ -1810965683604454696L,
+ -516197887510505242L,
+ 1240864593087756274L,
+ 6033499571835033332L,
+ 7223146028771530185L,
+ 909128106589125206L,
+ 1567720774747329341L,
+ -1867353301780159863L,
+ 4655107429511759333L,
+ 5356891185236995950L,
+ 182631115370802890L,
+ -3582744155969569138L,
+ 595148673029792797L,
+ 495183136068540256L,
+ 5536689004903505647L,
+ -8472683670935785889L,
+ -4335021702965928166L,
+ 7306662983232020244L,
+ 4285260837125010956L,
+ 8288813008819191181L,
+ -3442351913745287612L,
+ 4883297703151707194L,
+ 9135546183059994964L,
+ 123663780425483012L,
+ 509606241253238381L,
+ 5940344208569311369L,
+ -2650142344608291176L,
+ 3232776678942440459L,
+ -922581627593772181L,
+ 7617977317085633049L,
+ 7154902266379028518L,
+ -5806388675416795571L,
+ 4368003766009575737L,
+ -2922716024457242064L,
+ 4771160713173250118L,
+ 3275897444752647349L,
+ -297220751499763878L,
+ 5095659287766176401L,
+ 1181843887132908826L,
+ 9058283605301070357L,
+ 3984713963471276643L,
+ 6050484112980480005L,
+ 1551535065359244224L,
+ 565337293533335618L,
+ 7412521035272884309L,
+ -4735469481351389369L,
+ 6998597101178745656L,
+ -9107075101236275961L,
+ 5879828914430779796L,
+ 6034964979406620806L,
+ 5666406915264701514L,
+ -4666218379625258428L,
+ 2749972203764815656L,
+ -782986256139071446L,
+ 6830581400521008570L,
+ 2588852022632995043L,
+ -5484725487363818922L,
+ -3319556935687817112L,
+ 6481961252981840893L,
+ 2204492445852963006L,
+ -5301091763401031066L,
+ -2615065677047206256L,
+ -6769817545131782460L,
+ -8421640685322953142L,
+ -3669062629317949176L,
+ -9167016978640750490L,
+ 2783671191687959562L,
+ -7599469568522039782L,
+ -7589134103255480011L,
+ -5932706841188717592L,
+ -8689756354284562694L,
+ -3934347391198581249L,
+ -1344748563236040701L,
+ 2172701592984478834L,
+ -5322052340624064417L,
+ -8493945390573620511L,
+ 3349021988137788403L,
+ -1806262525300459538L,
+ -8091524448239736618L,
+ 4022306289903960690L,
+ -8346915997379834224L,
+ -2106001381993805461L,
+ -5784123934724688161L,
+ 6775158099649720388L,
+ -3869682756870293568L,
+ 4356490186652082006L,
+ 8469371446702290916L,
+ -2972961082318458602L,
+ -7188106622222784561L,
+ -4961006366631572412L,
+ 3199991182014172900L,
+ 2917435868590434179L,
+ 8385845305547872127L,
+ 7706824402560674655L,
+ -1587379863634865277L,
+ -4212156212298809650L,
+ -1305209322000720233L,
+ -7866728337506665880L,
+ 8195089740529247049L,
+ -4876930125798534239L,
+ 798222697981617129L,
+ -2441020897729372845L,
+ -3926158482651178666L,
+ -1254795122048514130L,
+ 5192463866522217407L,
+ -5426289318796042964L,
+ -3267454004443530826L,
+ 471043133625225785L,
+ -660956397365869974L,
+ -6149209189144999161L,
+ -2630977660039166559L,
+ 8512219789663151219L,
+ -3309844068134074620L,
+ -6211275327487847132L,
+ -2130171729366885995L,
+ 6569302074205462321L,
+ 4855778342281619706L,
+ 3867211421508653033L,
+ -3002480002418725542L,
+ -8297543107467502696L,
+ 8049642289208775831L,
+ -5439825716055425635L,
+ 7251760070798756432L,
+ -4774526021749797528L,
+ -3892389575184442548L,
+ 5162451061244344424L,
+ 6000530226398686578L,
+ -5713092252241819676L,
+ 8740913206879606081L,
+ -8693282419677309723L,
+ 1576205127972543824L,
+ 5760354502610401246L,
+ 3173225529903529385L,
+ 1785166236732849743L,
+ -1024443476832068882L,
+ -7389053248306187459L,
+ 1171021620017782166L,
+ 1471572212217428724L,
+ 7720766400407679932L,
+ -8844781213239282804L,
+ -7030159830170200877L,
+ 2195066352895261150L,
+ 1343620937208608634L,
+ 9178233160016731645L,
+ -757883447602665223L,
+ 3303032934975960867L,
+ -3685775162104101116L,
+ -4454903657585596656L,
+ -5721532367620482629L,
+ 8453227136542829644L,
+ 5397498317904798888L,
+ 7820279586106842836L,
+ -2369852356421022546L,
+ 3910437403657116169L,
+ 6072677490463894877L,
+ -2651044781586183960L,
+ 5173762670440434510L,
+ -2970017317595590978L,
+ -1024698859439768763L,
+ -3098335260967738522L,
+ -1983156467650050768L,
+ -8132353894276010246L,
+ -1088647368768943835L,
+ -3942884234250555927L,
+ 7169967005748210436L,
+ 2870913702735953746L,
+ -2207022373847083021L,
+ 1104181306093040609L,
+ 5026420573696578749L,
+ -5874879996794598513L,
+ -4777071762424874671L,
+ -7506667858329720470L,
+ -2926679936584725232L,
+ -5530649174168373609L,
+ 5282408526788020384L,
+ 3589529249264153135L,
+ -6220724706210580398L,
+ -7141769650716479812L,
+ 5142537361821482047L,
+ -7029808662366864423L,
+ -6593520217660744466L,
+ 1454581737122410695L,
+ -139542971769349865L,
+ 1727752089112067235L,
+ -775001449688420017L,
+ -5011311035350652032L,
+ -8671171179275033159L,
+ -2850915129917664667L,
+ -5258897903906998781L,
+ -6954153088230718761L,
+ -4070351752166223959L,
+ -6902592976462171099L,
+ -7850366369290661391L,
+ -4562443925864904705L,
+ 3186922928616271015L,
+ 2208521081203400591L,
+ -2727824999830592777L,
+ -3817861137262331295L,
+ 2236720618756809066L,
+ -4888946967413746075L,
+ -446884183491477687L,
+ -43021963625359034L,
+ -5857689226703189898L,
+ -2156533592262354883L,
+ -2027655907961967077L,
+ 7151844076490292500L,
+ -5029149124756905464L,
+ 526404452686156976L,
+ 8741076980297445408L,
+ 7962851518384256467L,
+ -105985852299572102L,
+ -2614605270539434398L,
+ -8265006689379110448L,
+ 8158561071761524496L,
+ -6923530157382047308L,
+ 5551949335037580397L,
+ 565709346370307061L,
+ -4780869469938333359L,
+ 6931895917517004830L,
+ 565234767538051407L,
+ -8663136372880869656L,
+ 1427340323685448983L,
+ 6492705666640232290L,
+ 1481585578088475369L,
+ -1712711110946325531L,
+ 3281685342714380741L,
+ 6441384790483098576L,
+ -1073539554682358394L,
+ 5704050067194788964L,
+ -5495724689443043319L,
+ -5425043165837577535L,
+ 8349736730194941321L,
+ -4123620508872850061L,
+ 4687874980541143573L,
+ -468891940172550975L,
+ -3212254545038049829L,
+ -6830802881920725628L,
+ 9033050533972480988L,
+ 4204031879107709260L,
+ -677513987701096310L,
+ -3286978557209370155L,
+ 1644111582609113135L,
+ 2040089403280131741L,
+ 3323690950628902653L,
+ -7686964480987925756L,
+ -4664519769497402737L,
+ 3358384147145476542L,
+ -4699919744264452277L,
+ -4795197464927839170L,
+ 5051607253379734527L,
+ -8987703459734976898L,
+ 8993686795574431834L,
+ -2688919474688811047L,
+ 375938183536293311L,
+ 1049459889197081920L,
+ -1213022037395838295L,
+ 4932989235110984138L,
+ -6647247877090282452L,
+ -7698817539128166242L,
+ -3264029336002462659L,
+ 6487828018122309795L,
+ -2660821091484592878L,
+ 7104391069028909121L,
+ -1765840012354703384L,
+ 85428166783788931L,
+ -6732726318028261938L,
+ 7566202549055682933L,
+ 229664898114413280L,
+ -1474237851782211353L,
+ -1571058880058007603L,
+ -7926453582850712144L,
+ 2487148368914275243L,
+ 8740031015380673473L,
+ 1908345726881363169L,
+ -2510061320536523178L,
+ 7854780026906019630L,
+ -6023415596650016493L,
+ -6264841978089051107L,
+ 4024998278016087488L,
+ -4266288992025826072L,
+ -3222176619422665563L,
+ -1999258726038299316L,
+ 1715270077442385636L,
+ 6764658837948099754L,
+ -8646962299105812577L,
+ -51484064212171546L,
+ -1482515279051057493L,
+ -8663965522608868414L,
+ -256555202123523670L,
+ 1973279596140303801L,
+ -7280796173024508575L,
+ -5691760367231354704L,
+ -5915786562256300861L,
+ -3697715074906156565L,
+ 3710290115318541949L,
+ 6796151623958134374L,
+ -935299482515386356L,
+ -7078378973978660385L,
+ 5379481350768846927L,
+ -9011221735308556302L,
+ 5936568631579608418L,
+ -6060732654964511813L,
+ -4243141607840017809L,
+ 3198488845875349355L,
+ -7809288876010447646L,
+ 4371587872421472389L,
+ -1304197371105522943L,
+ 7389861473143460103L,
+ -1892352887992004024L,
+ 2214828764044713398L,
+ 6347546952883613388L,
+ 1275694314105480954L,
+ -5262663163358903733L,
+ 1524757505892047607L,
+ 1474285098416162746L,
+ -7976447341881911786L,
+ 4014100291977623265L,
+ 8994982266451461043L,
+ -7737118961020539453L,
+ -2303955536994331092L,
+ 1383016539349937136L,
+ 1771516393548245271L,
+ -5441914919967503849L,
+ 5449813464890411403L,
+ -3321280356474552496L,
+ 4084073849712624363L,
+ 4290039323210935932L,
+ 2449523715173349652L,
+ 7494827882138362156L,
+ 9035007221503623051L,
+ 5722056230130603177L,
+ -5443061851556843748L,
+ -7554957764207092109L,
+ 447883090204372074L,
+ 533916651576859197L,
+ -3104765246501904165L,
+ -4002281505194601516L,
+ -8402008431255610992L,
+ -408273018037005304L,
+ 214196458752109430L,
+ 6458513309998070914L,
+ 2665048360156607904L,
+ 96698248584467992L,
+ -3238403026096269033L,
+ 6759639479763272920L,
+ -4231971627796170796L,
+ -2149574977639731179L,
+ -1437035755788460036L,
+ -6000005629185669767L,
+ 145244292800946348L,
+ -3056352941404947199L,
+ 3748284277779018970L,
+ 7328354565489106580L,
+ -2176895260373660284L,
+ 3077983936372755601L,
+ 1215485830019410079L,
+ 683050801367331140L,
+ -3173237622987755212L,
+ -1951990779107873701L,
+ -4714366021269652421L,
+ 4934690664256059008L,
+ 1674823104333774474L,
+ -3974408282362828040L,
+ 2001478896492417760L,
+ -4115105568354384199L,
+ -2039694725495941666L,
+ -587763432329933431L,
+ -391276713546911316L,
+ -5543400904809469053L,
+ 1882564440421402418L,
+ -4991793588968693036L,
+ 3454088185914578321L,
+ 2290855447126188424L,
+ 3027910585026909453L,
+ 2136873580213167431L,
+ -6243562989966916730L,
+ 5887939953208193029L,
+ -3491821629467655741L,
+ -3138303216306660662L,
+ 8572629205737718669L,
+ 4154439973110146459L,
+ 5542921963475106759L,
+ -2025215496720103521L,
+ -4047933760493641640L,
+ -169455456138383823L,
+ -1164572689128024473L,
+ -8551078127234162906L,
+ -7247713218016599028L,
+ 8725299775220778242L,
+ 6263466461599623132L,
+ 7931568057263751768L,
+ 7365493014712655238L,
+ -7343740914722477108L,
+ 8294118602089088477L,
+ 7677867223984211483L,
+ -7052188421655969232L,
+ -3739992520633991431L,
+ 772835781531324307L,
+ 881441588914692737L,
+ 6321450879891466401L,
+ 5682516032668315027L,
+ 8493068269270840662L,
+ -3895212467022280567L,
+ -3241911302335746277L,
+ -7199586338775635848L,
+ -4606922569968527974L,
+ -806850906331637768L,
+ 2433670352784844513L,
+ -5787982146811444512L,
+ 7852193425348711165L,
+ 8669396209073850051L,
+ -6898875695148963118L,
+ 6523939610287206782L,
+ -8084962379210153174L,
+ 8159432443823995836L,
+ -2631068535470883494L,
+ -338649779993793113L,
+ 6514650029997052016L,
+ 3926259678521802094L,
+ 5443275905907218528L,
+ 7312187582713433551L,
+ -2993773587362997676L,
+ -1068335949405953411L,
+ 4499730398606216151L,
+ 8538015793827433712L,
+ -4057209365270423575L,
+ -1504284818438273559L,
+ -6460688570035010846L,
+ 1765077117408991117L,
+ 8278320303525164177L,
+ 8510128922449361533L,
+ 1305722765578569816L,
+ 7250861238779078656L,
+ -576624504295396147L,
+ -4363714566147521011L,
+ -5932111494795524073L,
+ 1837387625936544674L,
+ -4186755953373944712L,
+ -7657073597826358867L,
+ 140408487263951108L,
+ 5578463635002659628L,
+ 3400326044813475885L,
+ -6092804808386714986L,
+ -2410324417287268694L,
+ 3222007930183458970L,
+ 4932471983280850419L,
+ 3554114546976144528L,
+ -7216067928362857082L,
+ -6115289896923351748L,
+ -6769646077108881947L,
+ 4263895947722578066L,
+ 2939136721007694271L,
+ 1426030606447416658L,
+ -1316192446807442076L,
+ 5366182640480055129L,
+ 6527003877470258527L,
+ 5849680119000207603L,
+ 5263993237214222328L,
+ -6936533648789185663L,
+ -9063642143790846605L,
+ 3795892210758087672L,
+ 4987213125282940176L,
+ 2505500970421590750L,
+ -1014022559552365387L,
+ -3574736245968367770L,
+ 1180676507127340259L,
+ -2261908445207512503L,
+ -8416682633172243509L,
+ 1114990703652673283L,
+ 7753746660364401380L,
+ 1874908722469707905L,
+ 2033421444403047677L,
+ 21412168602505589L,
+ 385957952615286205L,
+ 2053171460074727107L,
+ 1915131899400103774L,
+ 6680879515029368390L,
+ 568807208929724162L,
+ -6211541450459087674L,
+ -5026690733412145448L,
+ 1384781941404886235L,
+ -98027820852587266L,
+ 1806580495924249669L,
+ 6322077317403503963L,
+ 9078162931419569939L,
+ -2809061215428363978L,
+ 7697867577577415733L,
+ -5270063855897737274L,
+ 5649864555290587388L,
+ -6970990547695444247L,
+ 579684606137331754L,
+ 3871931565451195154L,
+ 2030008578322050218L,
+ -5012357307111799829L,
+ -2271365921756144065L,
+ 4551962665158074190L,
+ -3385474923040271312L,
+ -7647625164191633577L,
+ 6634635380316963029L,
+ -5201190933687061585L,
+ 8864818738548593973L,
+ 2855828214210882907L,
+ 9154512990734024165L,
+ -6945306719789457786L,
+ 1200243352799481087L,
+ 875998327415853787L,
+ 1275313054449881011L,
+ -6105772045375948736L,
+ -2926927684328291437L,
+ 9200050852144954779L,
+ 5188726645765880663L,
+ 5197037323312705176L,
+ 3434926231010121611L,
+ -5054013669361906544L,
+ 2582959199749224670L,
+ -6053757512723474059L,
+ -5016308176846054473L,
+ -2509827316698626133L,
+ 7700343644503853204L,
+ -1997627249894596731L,
+ 3993168688325352290L,
+ -8181743677541277704L,
+ 3719056119682565597L,
+ -7264411659282947790L,
+ 7177028972346484464L,
+ -5460831176884283278L,
+ 1799904662416293978L,
+ -6549616005092764514L,
+ 5472403994001122052L,
+ 8683463751708388502L,
+ -7873363037838316398L,
+ 689134758256487260L,
+ -1287443614028696450L,
+ 4452712919702709507L,
+ 762909374167538893L,
+ 6594302592326281411L,
+ 1183786629674781984L,
+ 5021847859620133476L,
+ -2490098069181538915L,
+ 5105145136026716679L,
+ 4437836948098585718L,
+ 1987270426215858862L,
+ 6170312798826946249L,
+ 634297557126003407L,
+ -1672811625495999581L,
+ 6282971595586218191L,
+ 4549149305727581687L,
+ -5652165370435317782L,
+ 1064501550023753890L,
+ -5334885527127139723L,
+ -6904378001629481237L,
+ -1807576691784201230L,
+ -205688432992053911L,
+ 7621619053293393289L,
+ 6258649161313982470L,
+ -1111634238359342096L,
+ -8044260779481691987L,
+ 400270655839010807L,
+ -7806833581382890725L,
+ -2970563349459508036L,
+ -7392591524816802798L,
+ 2918924613160219805L,
+ -6444161627929149002L,
+ 6096497501321778876L,
+ -1477975665655830038L,
+ 1690651307597306138L,
+ -2364076888826085362L,
+ -6521987420014905821L,
+ -4419193480146960582L,
+ 3538587780233092477L,
+ 8374665961716940404L,
+ 7492412312405424500L,
+ 6311662249091276767L,
+ -1240235198282023566L,
+ 5478559631401166447L,
+ 3476714419313462133L,
+ 377427285984503784L,
+ 2570472638778991109L,
+ -2741381313777447835L,
+ -7123472905503039596L,
+ 2493658686946955193L,
+ 1024677789035847585L,
+ -2916713904339582981L,
+ -4532003852004642304L,
+ -2202143560366234111L,
+ 5832267856442755135L,
+ -261740607772957384L,
+ 239435959690278014L,
+ 5755548341947719409L,
+ 6138795458221887696L,
+ -7709506987360146385L,
+ -6657487758065140444L,
+ -7006376793203657499L,
+ 6544409861846502033L,
+ 3171929352014159247L,
+ 1051041925048792869L,
+ 2617300158375649749L,
+ 952652799620095175L,
+ -576661730162168147L,
+ -1634191369221345988L,
+ 4833656816115993519L,
+ 647566759700005786L,
+ 2473810683785291822L,
+ 3005977181064745326L,
+ -3321881966853149523L,
+ 7595337666427588699L,
+ 6004093624251057224L,
+ -563917505657690279L,
+ 6117428527147449302L,
+ -6287297509522976113L,
+ -4527219334756214406L,
+ 742626429298092489L,
+ 3057351806086972041L,
+ 645967551210272605L,
+ -4428701157828864227L,
+ 3236379103879435414L,
+ -8477089892132066300L,
+ -6127365537275859058L,
+ -4052490484706946358L,
+ -8004854976625046469L,
+ -3679456917426613424L,
+ -8212793762082595299L,
+ -818288739465424130L,
+ 1358812099481667095L,
+ 7835987612195254310L,
+ -3663247409614323059L,
+ -2931105150130396604L,
+ 7296136776835614792L,
+ -2014557408985889628L,
+ 7267662411237959788L,
+ 3699280615819277743L,
+ -212010675469091396L,
+ -6518374332458360120L,
+ 145026010541628849L,
+ 1879297324213501001L,
+ -7146296067751816833L,
+ -5002958800391379931L,
+ 6060682439924517608L,
+ -432234782921170964L,
+ -6669688947353256956L,
+ 7728943532792041267L,
+ 830911367341171721L,
+ 3396934884314289432L,
+ -779464156662780749L,
+ 2330041851883352285L,
+ -4783350380736276693L,
+ -5758476056890049254L,
+ -7551552301614791791L,
+ 1253334187723911710L,
+ -2685018208308798978L,
+ 5379636036360946454L,
+ 6154668487114681217L,
+ -8641287462255458898L,
+ 4676087643800649558L,
+ -2405142641398691475L,
+ 1088685126864246881L,
+ 6431149082338374041L,
+ -607357695335069155L,
+ -720970692129524140L,
+ 2648766932394044468L,
+ 8408344790179354573L,
+ -6193808387735667350L,
+ 7722524628524697419L,
+ -6975433852560238120L,
+ -2925851029234475295L,
+ -4274458387165211028L,
+ -8355836377702147319L,
+ 5278146397877332061L,
+ 8502098812383680707L,
+ 2292836642336580326L,
+ -6127608082651070062L,
+ 2222301962240611208L,
+ -1930887695854799378L,
+ 7640503480494894592L,
+ 1162652186586436094L,
+ -1918002592943761683L,
+ 7648998601717261840L,
+ -8472603250832757057L,
+ -988877663117552456L,
+ 2368458128168026494L,
+ -6480813811998475245L,
+ -5896967824416018967L,
+ -2593783161701820446L,
+ 6950098417530252598L,
+ 6362589545555771236L,
+ 7981389665448567125L,
+ 3954017080198558850L,
+ 1626078615050230622L,
+ 6650159066527969109L,
+ 697345338922935394L,
+ -1226816215461768626L,
+ 8740408765973837440L,
+ -4194155864629568323L,
+ 7016680023232424746L,
+ 6043281358142429469L,
+ -4201005667174376809L,
+ 1216727117859013155L,
+ 6367202436544203935L,
+ 35414869396444636L,
+ 3715622794033998412L,
+ 488654435687670554L,
+ -2503747297224687460L,
+ 3147101919441470388L,
+ -8248611218693190922L,
+ 970697264481229955L,
+ 3411465763826851418L,
+ 9117405004661599969L,
+ -5204346498331519734L,
+ -19637460819385174L,
+ -5039124225167977219L,
+ 2990108874601696668L,
+ -2623857460235459202L,
+ 4256291692861397446L,
+ 6724147860870760443L,
+ 3558616688507246537L,
+ 6487680097936412800L,
+ -6470792832935928161L,
+ 4314814550912237614L,
+ -1292878983006062345L,
+ 6791915152630414174L,
+ 5971652079925815310L,
+ 2557529546662864312L,
+ 466175054322801580L,
+ -585216717310746872L,
+ -2486640422147349036L,
+ 7212029603994220134L,
+ 3958995069888972500L,
+ 4950471855791412790L,
+ -3721948842035712763L,
+ -6184503487488243051L,
+ 4079570444585775332L,
+ -3952156172546996872L,
+ 4543894231118208322L,
+ -1739995588466209963L,
+ 9155948355455935530L,
+ 5821980345462207860L,
+ -2431287667309520417L,
+ -3890108130519441316L,
+ -558124689277030490L,
+ 6079823537335801717L,
+ 5409742395192364262L,
+ -2329885777717160453L,
+ -7332804342513677651L,
+ 1466490574975950555L,
+ -420549419907427929L,
+ -5249909814389692516L,
+ -5145692168206210661L,
+ 5934113980649113921L,
+ 3241618428555359661L,
+ -6622110266160980250L,
+ 5048250878669516223L,
+ 5747219637359976174L,
+ 2975906212588223728L,
+ 5730216838646273215L,
+ -176713127129024690L,
+ 6734624279336671146L,
+ 5127866734316017180L,
+ 7111761230887705595L,
+ 3457811808274317235L,
+ 3362961434604932375L,
+ -1877869936854991246L,
+ 7171428594877765665L,
+ -8252167178400462374L,
+ -6306888185035821047L,
+ -6684702191247683887L,
+ -7754928454824190529L,
+ -1902605599135704386L,
+ -4037319846689421239L,
+ 8493746058123583457L,
+ -8156648963857047193L,
+ 2051510355149839497L,
+ -1256416624177218909L,
+ -3344927996254072010L,
+ -1838853051925943568L,
+ 316927471680974556L,
+ -1502257066700798003L,
+ -5836095610125837606L,
+ -1594125583615895424L,
+ 1442211486559637962L,
+ -144295071206619569L,
+ 5159850900959273410L,
+ 4589139881166423678L,
+ -7038726987463097509L,
+ 2886082400772974595L,
+ 2780759114707171916L,
+ 5694649587906297495L,
+ 1260349041268169667L,
+ 4921517488271434890L,
+ 644696475796073018L,
+ 6262811963753436289L,
+ -6128198676595868773L,
+ -3625352083004760261L,
+ -8751453332943236675L,
+ 8749249479868749221L,
+ -2450808199545048250L,
+ -6517435817046180917L,
+ -3433321727429234998L,
+ -2591586258908763451L,
+ 3847750870868804507L,
+ 6603614438546398643L,
+ -7598682191291031287L,
+ 8710261565627204971L,
+ 4753389483755344355L,
+ -4645333069458786881L,
+ -6742695046613492214L,
+ 643070478568866643L,
+ -7543096104151965610L,
+ 7171495384655926161L,
+ 595063872610714431L,
+ 3292310150781130424L,
+ 4326847806055440904L,
+ -4580020566072794152L,
+ 3142286571820373678L,
+ 5530356537440155930L,
+ 546372639737516181L,
+ 7401214477400367500L,
+ 7406531960402873109L,
+ 3287639667219172570L,
+ 4977301681213633671L,
+ 5253257820925174498L,
+ 2906216636104297878L,
+ 6142955758238347523L,
+ -3498651268741727235L,
+ -5875053958265588593L,
+ 3896719087169993883L,
+ -910904726885775073L,
+ 380107493197368177L,
+ -4993591912695447004L,
+ 2970487257212582761L,
+ 2551762717569548774L,
+ 953061649962736812L,
+ 8949739538606589463L,
+ -2962839167079475801L,
+ -1375673191272573835L,
+ 3761793818361866390L,
+ -389577789190726878L,
+ 5661262051502180269L,
+ -6558556411143987683L,
+ -702798336372315031L,
+ -336662820551371779L,
+ 998576401126580155L,
+ -5945021269112582755L,
+ 6108533925730179871L,
+ 2207095297001999618L,
+ -9042779159998880435L,
+ -6177868444342118372L,
+ 6775965402605895077L,
+ -3788428885163306576L,
+ 7790055010527190387L,
+ 3581587652196995358L,
+ -6176354155561607694L,
+ -5859381340906321207L,
+ 395898765763528395L,
+ 8132967590863909348L,
+ -3329092504090544483L,
+ -6785855381158040247L,
+ 1497218517051796750L,
+ -5352392845588925911L,
+ -6271364901230559194L,
+ 2314830370653350118L,
+ -7617588269001325450L,
+ 1423166885758213795L,
+ 8538612578307869519L,
+ -61918791718295474L,
+ -8177103503192338593L,
+ -4740086042584326695L,
+ 3677931948215558698L,
+ 6558856291580149558L,
+ 2674975452453336335L,
+ 5133796555646930522L,
+ 5139252693299337100L,
+ 7949476871295347205L,
+ 4407815324662880678L,
+ -3758305875280581215L,
+ 6066309507576587415L,
+ -7368508486398350973L,
+ -3181640264332856492L,
+ 6905100869343314145L,
+ 3677177673848733417L,
+ 8862933624870506941L,
+ -8575223195813810568L,
+ 9178470351355678144L,
+ 4677809017145408358L,
+ -1194833416287894989L,
+ 3436364743255571183L,
+ -5204770725795363579L,
+ 560599448536335263L,
+ -3192077522964776200L,
+ -751575299648803575L,
+ 6334581746534596579L,
+ -8358187891202563300L,
+ -1462480609823525055L,
+ 5605961062646987941L,
+ 4968399805931440889L,
+ 7968693270782626653L,
+ -5868205923557518188L,
+ 1830234928743560617L,
+ -8435261076693154407L,
+ 2138416970728681332L,
+ 8088740745199685138L,
+ 806532400344230520L,
+ 1800590379902909333L,
+ -8909128842071238901L,
+ -7357495566969170860L,
+ 3679766664126940553L,
+ 2060050474865839094L,
+ 2363972840121763414L,
+ 525695004292982714L,
+ -1224842191746529593L,
+ 7011317848855545003L,
+ -6337167558180299938L,
+ -5184688833363785939L,
+ -8426673387248359061L,
+ -5035438815930785229L,
+ 3521810320608058994L,
+ 4803742557254962242L,
+ 6623527039545786598L,
+ -1221475882122634738L,
+ -3344794405518401087L,
+ 6510298498414053658L,
+ 2844753907937720338L,
+ 90502309714994895L,
+ -750403235344282494L,
+ -4825474181021465833L,
+ -3405519947983849510L,
+ 3503875590944089793L,
+ 7286294700691822468L,
+ 7828126881500292486L,
+ 8437899353709338096L,
+ 136052254470293480L,
+ 1113259077339995086L,
+ -8244887265606191121L,
+ 8089569503800461649L,
+ -1429698194850157567L,
+ 1575595674002364989L,
+ 3576095286627428675L,
+ -7653655285807569222L,
+ -6053506977362539111L,
+ -3923855345805787169L,
+ -8001149080454232377L,
+ -4382867706931832271L,
+ 4212860258835896297L,
+ 4207674254247034014L,
+ 5519424058779519159L,
+ -754483042161434654L,
+ 1434113479814210082L,
+ -6416645032698336896L,
+ 5624329676066514819L,
+ -8229557208322175959L,
+ 3922640911653270376L,
+ 7826932478782081910L,
+ -4862787164488635842L,
+ 1449234668827944573L,
+ -1781657689570106327L,
+ 5442827552725289699L,
+ 3589862161007644641L,
+ 4787115581650652778L,
+ -3512152721942525726L,
+ -6750103117958685206L,
+ 5012970446659949261L,
+ 6797752795961689017L,
+ 5086454597639943700L,
+ -7616068364979994076L,
+ 1492846825433110217L,
+ 2967476304433704510L,
+ -8413824338284112078L,
+ -1319049442043273974L,
+ -1756090916806844109L,
+ -9061091728950139525L,
+ -6864767830358160810L,
+ 4879532090226251157L,
+ 5528644708740739488L
+ };
+}
Propchange:
dev/datasketches/memory/2.2.0-RC1/apache-datasketches-memory-2.2.0-src/datasketches-memory-java8/src/test/java/org/apache/datasketches/memory/internal/XxHash64LoopingTest.java
------------------------------------------------------------------------------
svn:executable = *
Added:
dev/datasketches/memory/2.2.0-RC1/apache-datasketches-memory-2.2.0-src/datasketches-memory-java8/src/test/java/org/apache/datasketches/memory/internal/XxHash64Test.java
==============================================================================
---
dev/datasketches/memory/2.2.0-RC1/apache-datasketches-memory-2.2.0-src/datasketches-memory-java8/src/test/java/org/apache/datasketches/memory/internal/XxHash64Test.java
(added)
+++
dev/datasketches/memory/2.2.0-RC1/apache-datasketches-memory-2.2.0-src/datasketches-memory-java8/src/test/java/org/apache/datasketches/memory/internal/XxHash64Test.java
Tue May 21 21:11:49 2024
@@ -0,0 +1,183 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.datasketches.memory.internal;
+
+import static org.apache.datasketches.memory.XxHash.*;
+import static org.testng.Assert.assertEquals;
+import static org.testng.Assert.assertTrue;
+
+import java.util.Random;
+import java.util.concurrent.ThreadLocalRandom;
+
+import org.apache.datasketches.memory.BaseState;
+import org.apache.datasketches.memory.Memory;
+import org.apache.datasketches.memory.WritableMemory;
+import org.testng.annotations.Test;
+
+import net.openhft.hashing.LongHashFunction;
+
+/**
+ * @author Lee Rhodes
+ */
+public class XxHash64Test {
+
+ @Test
+ public void offsetChecks() {
+ long seed = 12345;
+ int blocks = 6;
+ int cap = blocks * 16;
+
+ long hash;
+
+ WritableMemory wmem = WritableMemory.allocate(cap);
+ for (int i = 0; i < cap; i++) { wmem.putByte(i, (byte)(-128 + i)); }
+
+ for (int offset = 0; offset < 16; offset++) {
+ int arrLen = cap - offset;
+ hash = wmem.xxHash64(offset, arrLen, seed);
+ assertTrue(hash != 0);
+ }
+ }
+
+ @Test
+ public void byteArrChecks() {
+ long seed = 0;
+ int offset = 0;
+ int bytes = 16;
+
+ for (int j = 1; j < bytes; j++) {
+ byte[] in = new byte[bytes];
+
+ WritableMemory wmem = WritableMemory.writableWrap(in);
+ for (int i = 0; i < j; i++) { wmem.putByte(i, (byte) (-128 + i)); }
+
+ long hash =wmem.xxHash64(offset, bytes, seed);
+ assertTrue(hash != 0);
+ }
+ }
+
+ /*
+ * This test is adapted from
+ * <a href="https://github.com/OpenHFT/Zero-Allocation-Hashing/blob/master/
+ * src/test/java/net/openhft/hashing/XxHashCollisionTest.java">
+ * OpenHFT/Zero-Allocation-Hashing</a> to test hash compatibility with that
implementation.
+ * It is licensed under Apache License, version 2.0. See LICENSE.
+ */
+ @Test
+ public void collisionTest() {
+ WritableMemory wmem = WritableMemory.allocate(128);
+ wmem.putLong(0, 1);
+ wmem.putLong(16, 42);
+ wmem.putLong(32, 2);
+ long h1 = wmem.xxHash64(0, wmem.getCapacity(), 0);
+
+ wmem.putLong(0, 1L + 0xBA79078168D4BAFL);
+ wmem.putLong(32, 2L + 0x9C90005B80000000L);
+ long h2 = wmem.xxHash64(0, wmem.getCapacity(), 0);
+ assertEquals(h1, h2);
+
+ wmem.putLong(0, 1L + (0xBA79078168D4BAFL * 2));
+ wmem.putLong(32, 2L + (0x392000b700000000L)); //= (0x9C90005B80000000L *
2) fix overflow false pos
+
+ long h3 = wmem.xxHash64(0, wmem.getCapacity(), 0);
+ assertEquals(h2, h3);
+ }
+
+ /**
+ * This simple test compares the output of {@link BaseState#xxHash64(long,
long, long)} with the
+ * output of {@link net.openhft.hashing.LongHashFunction}, that itself is
tested against the
+ * reference implementation in C. This increase confidence that the xxHash
function implemented
+ * in this package is in fact the same xxHash function implemented in C.
+ *
+ * @author Roman Leventov
+ * @author Lee Rhodes
+ */
+ @Test
+ public void testXxHash() {
+ Random random = ThreadLocalRandom.current();
+ for (int len = 0; len < 100; len++) {
+ byte[] bytes = new byte[len];
+ for (int i = 0; i < 10; i++) {
+ long zahXxHash = LongHashFunction.xx().hashBytes(bytes);
+ long memoryXxHash = Memory.wrap(bytes).xxHash64(0, len, 0);
+ assertEquals(memoryXxHash, zahXxHash);
+ random.nextBytes(bytes);
+ }
+ }
+ }
+
+ private static final byte[] barr = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12,
13, 14, 15, 16};
+
+ @Test
+ public void testArrHashes() {
+ WritableMemory wmem = WritableMemory.writableWrap(barr);
+ long hash0 = wmem.xxHash64(8, 8, 0);
+ long hash1 = hashByteArr(barr, 8, 8, 0);
+ assertEquals(hash1, hash0);
+
+ char[] carr = new char[8];
+ wmem.getCharArray(0, carr, 0, 8);
+ hash1 = hashCharArr(carr, 4, 4, 0);
+ assertEquals(hash1, hash0);
+
+ short[] sarr = new short[8];
+ wmem.getShortArray(0, sarr, 0, 8);
+ hash1 = hashShortArr(sarr, 4, 4, 0);
+ assertEquals(hash1, hash0);
+
+ int[] iarr = new int[4];
+ wmem.getIntArray(0, iarr, 0, 4);
+ hash1 = hashIntArr(iarr, 2, 2, 0);
+ assertEquals(hash1, hash0);
+
+ float[] farr = new float[4];
+ wmem.getFloatArray(0, farr, 0, 4);
+ hash1 = hashFloatArr(farr, 2, 2, 0);
+ assertEquals(hash1, hash0);
+
+ long[] larr = new long[2];
+ wmem.getLongArray(0, larr, 0, 2);
+ hash1 = hashLongArr(larr, 1, 1, 0);
+ long in = wmem.getLong(8);
+ long hash2 = hashLong(in, 00); //tests the single long hash
+ assertEquals(hash1, hash0);
+ assertEquals(hash2, hash0);
+
+ double[] darr = new double[2];
+ wmem.getDoubleArray(0, darr, 0, 2);
+ hash1 = hashDoubleArr(darr, 1, 1, 0);
+ assertEquals(hash1, hash0);
+
+ boolean[] blarr = new boolean[16];
+ wmem.getBooleanArray(0, blarr, 0, 16); //any byte != 0 is true
+ hash1 = hashBooleanArr(blarr, 8, 8, 0);
+ assertEquals(hash1, hash0);
+ }
+
+ @Test
+ public void testString() {
+ String s = "Now is the time for all good men to come to the aid of their
country.";
+ char[] arr = s.toCharArray();
+ long hash0 = hashString(s, 0, s.length(), 0);
+ long hash1 = hashCharArr(arr, 0, arr.length, 0);
+ assertEquals(hash1, hash0);
+ }
+
+}
Propchange:
dev/datasketches/memory/2.2.0-RC1/apache-datasketches-memory-2.2.0-src/datasketches-memory-java8/src/test/java/org/apache/datasketches/memory/internal/XxHash64Test.java
------------------------------------------------------------------------------
svn:executable = *
Added:
dev/datasketches/memory/2.2.0-RC1/apache-datasketches-memory-2.2.0-src/datasketches-memory-java8/src/test/java/org/apache/datasketches/memory/internal/ZeroCapacityTest.java
==============================================================================
---
dev/datasketches/memory/2.2.0-RC1/apache-datasketches-memory-2.2.0-src/datasketches-memory-java8/src/test/java/org/apache/datasketches/memory/internal/ZeroCapacityTest.java
(added)
+++
dev/datasketches/memory/2.2.0-RC1/apache-datasketches-memory-2.2.0-src/datasketches-memory-java8/src/test/java/org/apache/datasketches/memory/internal/ZeroCapacityTest.java
Tue May 21 21:11:49 2024
@@ -0,0 +1,68 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.datasketches.memory.internal;
+
+import static org.testng.Assert.assertEquals;
+
+import java.nio.ByteBuffer;
+
+import org.apache.datasketches.memory.Memory;
+import org.apache.datasketches.memory.WritableHandle;
+import org.apache.datasketches.memory.WritableMemory;
+import org.testng.Assert;
+import org.testng.annotations.Test;
+
+/**
+ * @author Lee Rhodes
+ */
+public class ZeroCapacityTest {
+
+ @Test
+ public void checkZeroCapacity() throws Exception {
+ WritableMemory wmem = WritableMemory.allocate(0);
+ assertEquals(wmem.getCapacity(), 0);
+
+ Memory.wrap(new byte[0]);
+ Memory.wrap(ByteBuffer.allocate(0));
+ Memory mem3 = Memory.wrap(ByteBuffer.allocateDirect(0));
+ mem3.region(0, 0);
+ WritableHandle wh = null;
+ try {
+ wh = WritableMemory.allocateDirect(0);
+ Assert.fail();
+ } catch (IllegalArgumentException ignore) {
+ if (wh != null) { wh.close(); }
+ // expected
+ }
+ }
+
+ @Test
+ public void printlnTest() {
+ //println("PRINTING: "+this.getClass().getName());
+ }
+
+ /**
+ * @param s value to print
+ */
+ static void println(String s) {
+ //System.out.println(s); //disable here
+ }
+
+}
Propchange:
dev/datasketches/memory/2.2.0-RC1/apache-datasketches-memory-2.2.0-src/datasketches-memory-java8/src/test/java/org/apache/datasketches/memory/internal/ZeroCapacityTest.java
------------------------------------------------------------------------------
svn:executable = *
Added:
dev/datasketches/memory/2.2.0-RC1/apache-datasketches-memory-2.2.0-src/datasketches-memory-java8/src/test/resources/GettysburgAddress.txt
==============================================================================
---
dev/datasketches/memory/2.2.0-RC1/apache-datasketches-memory-2.2.0-src/datasketches-memory-java8/src/test/resources/GettysburgAddress.txt
(added)
+++
dev/datasketches/memory/2.2.0-RC1/apache-datasketches-memory-2.2.0-src/datasketches-memory-java8/src/test/resources/GettysburgAddress.txt
Tue May 21 21:11:49 2024
@@ -0,0 +1,7 @@
+Abraham Lincoln's Gettysburg Address:
+
+ Four score and seven years ago our fathers brought forth on this
continent, a new nation, conceived in Liberty, and dedicated to the proposition
that all men are created equal.
+
+ Now we are engaged in a great civil war, testing whether that nation, or
any nation so conceived and so dedicated, can long endure. We are met on a
great battle-field of that war. We have come to dedicate a portion of that
field, as a final resting place for those who here gave their lives that that
nation might live. It is altogether fitting and proper that we should do this.
+
+ But, in a larger sense, we can not dedicate â- we can not consecrate
â- we can not hallow â- this ground. The brave men, living and dead, who
struggled here, have consecrated it, far above our poor power to add or
detract. The world will little note, nor long remember what we say here, but it
can never forget what they did here. It is for us the living, rather, to be
dedicated here to the unfinished work which they who fought here have thus far
so nobly advanced. It is rather for us to be here dedicated to the great task
remaining before us -â that from these honored dead we take increased
devotion to that cause for which they gave the last full measure of devotion
-â that we here highly resolve that these dead shall not have died in vain
-â that this nation, under God, shall have a new birth of freedom -â and
that government of the people, by the people, for the people, shall not perish
from the earth.
Propchange:
dev/datasketches/memory/2.2.0-RC1/apache-datasketches-memory-2.2.0-src/datasketches-memory-java8/src/test/resources/GettysburgAddress.txt
------------------------------------------------------------------------------
svn:executable = *
Added:
dev/datasketches/memory/2.2.0-RC1/apache-datasketches-memory-2.2.0-src/docs/eclipse.md
==============================================================================
---
dev/datasketches/memory/2.2.0-RC1/apache-datasketches-memory-2.2.0-src/docs/eclipse.md
(added)
+++
dev/datasketches/memory/2.2.0-RC1/apache-datasketches-memory-2.2.0-src/docs/eclipse.md
Tue May 21 21:11:49 2024
@@ -0,0 +1,150 @@
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements. See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership. The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied. See the License for the
+ specific language governing permissions and limitations
+ under the License.
+-->
+
+
+# Eclipse IDE Setup
+
+The use of Maven submodules to build a Multi Release JAR was motivated by its
compatibility with
+popular IDEs. There are two configuration properties to be aware of when
configuring your local
+development environment:
+
+1) Java compiler versions
+2) Compiler arguments for JPMS
+
+### Java compiler versions
+
+Settings are usually synchronized with Maven Toolchain configuration,
otherwise the Java version
+for a Maven module should be set as follows:
+
+| Maven submodule | JDK |
+| -------------------------- | --- |
+| datasketches-memory | 8 |
+| datasketches-memory-java8 | 8 |
+| datasketches-memory-java11 | 11 |
+
+### Compiler arguments for JPMS
+
+In order to compile Maven modules in Java versions 11 and above, it is
necessary to provide the
+following arguments to the compiler. These are usually synchronized with the
`pom.xml`
+configuration:
+
+```xml
+ <compilerArgs>
+ <arg>--add-exports</arg>
+ <arg>java.base/jdk.internal.ref=org.apache.datasketches.memory</arg>
+ </compilerArgs>
+```
+
+---
+
+## Running Datasketches-Memory in Eclipse
+
+Note that the following configuration was verified using Eclipse Version:
2020-12 (4.18.0)
+
+### The eclipse maven plugin
+
+The [Eclipse Maven
plugin](https://maven.apache.org/plugins/maven-eclipse-plugin/) is used to
+generate Eclipse IDE files. In order to run the eclipse plugin use:
+
+ $ mvn clean eclipse:eclipse -DskipTests=true
+
+More information about using the eclipse plugin with multi-module Maven builds
can be found
+in the Maven
+[Multiple Module
Projects](https://maven.apache.org/plugins/maven-eclipse-plugin/reactor.html)
+document.
+
+Please note that this plugin is retired and no longer maintained!
+
+---
+
+### Importing the project into eclipse
+
+From the **Package Explorer** View:
+
+- Right-click on a blank space in the view
+- Select **Import/Maven/Existing Maven Projects**
+- Select **Next**, and browse to the project directory
+- Click **Open**
+
+---
+
+### Setting compiler arguments for JPMS
+
+Although these should be set automatically, the Eclipse IDE does not currently
configure these
+settings according to the `pom.xml` - see this
+[Eclipse Bug](https://github.com/eclipse-m2e/m2e-core/issues/129).
+Ensure that the required JPMS arguments are set for the compiler (Java 11
only).
+
+- First, right-click on the `datasketches-memory-java11` project, and select
+**Properties/Java Build Path**.
+- Next, open the **Module Dependencies** tab and select the `java.base`
package.
+- Click on **Configured details**, followed by **Expose package**.
+- In the dialog box, enter package: ```jdk.internal.ref```, and
+`org.apache.datasketches.memory` as the target module.
+- Ensure that the **exports** checkbox is selected.
+
+
+
+- Finally, click **Apply and Close**:
+
+
+
+Note: These arguments need only be supplied for `datasketches-memory-java11`.
+
+---
+
+### Setting Java compiler settings
+
+This should be set automatically by the IDE. However, you may ensure that the
correct Java
+compliance level is set for each module by using the Eclipse `Java Compiler`
dialog.
+
+- Open the **Java Compiler** dialog, and ensure **Enable project specific
settings** is checked:
+
+
+
+You might need to verify this for each module, making sure the correct
compliance level is used:
+
+- `datasketches-memory-java11` should use level 11 compliance.
+- `datasketches-memory-java8` should use level 1.8 compliance.
+
+---
+
+### Setting JRE library versions
+
+This should be set automatically by the IDE. However, you may ensure that the
correct JRE is
+used for each module by using the Eclipse **Java Build Path** dialog.
+
+- First, open the project properties dialog for the
`datasketches-memory-java11` project, and
+click on **Java Build Path**.
+- Next, open the **Libraries** tab and select the **JRE System Library** under
**Modulepath**.
+- Click **Edit** and ensure that the **Execution Environment** is selected and
set to Java 11:
+
+
+
+- Lastly, for all other modules, verify that the **Execution Environment** is
selected and set
+to the Java 8 JRE:
+
+
+
+### Running unit tests
+
+- Under the `datasketches-memory-java8` module, right-click on the
`src/test/java`
+directory.
+- Select **Run-As** / **TestNG Test**
+- It should open a new window and run over 400 tests without error.
Propchange:
dev/datasketches/memory/2.2.0-RC1/apache-datasketches-memory-2.2.0-src/docs/eclipse.md
------------------------------------------------------------------------------
svn:executable = *
Added:
dev/datasketches/memory/2.2.0-RC1/apache-datasketches-memory-2.2.0-src/docs/img/eclipse-build-path-1.png
==============================================================================
Binary file - no diff available.
Propchange:
dev/datasketches/memory/2.2.0-RC1/apache-datasketches-memory-2.2.0-src/docs/img/eclipse-build-path-1.png
------------------------------------------------------------------------------
svn:executable = *
Propchange:
dev/datasketches/memory/2.2.0-RC1/apache-datasketches-memory-2.2.0-src/docs/img/eclipse-build-path-1.png
------------------------------------------------------------------------------
svn:mime-type = application/octet-stream
Added:
dev/datasketches/memory/2.2.0-RC1/apache-datasketches-memory-2.2.0-src/docs/img/eclipse-build-path-2.png
==============================================================================
Binary file - no diff available.
Propchange:
dev/datasketches/memory/2.2.0-RC1/apache-datasketches-memory-2.2.0-src/docs/img/eclipse-build-path-2.png
------------------------------------------------------------------------------
svn:executable = *
Propchange:
dev/datasketches/memory/2.2.0-RC1/apache-datasketches-memory-2.2.0-src/docs/img/eclipse-build-path-2.png
------------------------------------------------------------------------------
svn:mime-type = application/octet-stream
Added:
dev/datasketches/memory/2.2.0-RC1/apache-datasketches-memory-2.2.0-src/docs/img/eclipse-compiler-level.png
==============================================================================
Binary file - no diff available.
Propchange:
dev/datasketches/memory/2.2.0-RC1/apache-datasketches-memory-2.2.0-src/docs/img/eclipse-compiler-level.png
------------------------------------------------------------------------------
svn:executable = *
Propchange:
dev/datasketches/memory/2.2.0-RC1/apache-datasketches-memory-2.2.0-src/docs/img/eclipse-compiler-level.png
------------------------------------------------------------------------------
svn:mime-type = application/octet-stream
Added:
dev/datasketches/memory/2.2.0-RC1/apache-datasketches-memory-2.2.0-src/docs/img/eclipse-java-compiler-arguments-1.png
==============================================================================
Binary file - no diff available.
Propchange:
dev/datasketches/memory/2.2.0-RC1/apache-datasketches-memory-2.2.0-src/docs/img/eclipse-java-compiler-arguments-1.png
------------------------------------------------------------------------------
svn:executable = *
Propchange:
dev/datasketches/memory/2.2.0-RC1/apache-datasketches-memory-2.2.0-src/docs/img/eclipse-java-compiler-arguments-1.png
------------------------------------------------------------------------------
svn:mime-type = application/octet-stream
Added:
dev/datasketches/memory/2.2.0-RC1/apache-datasketches-memory-2.2.0-src/docs/img/eclipse-java-compiler-arguments-2.png
==============================================================================
Binary file - no diff available.
Propchange:
dev/datasketches/memory/2.2.0-RC1/apache-datasketches-memory-2.2.0-src/docs/img/eclipse-java-compiler-arguments-2.png
------------------------------------------------------------------------------
svn:executable = *
Propchange:
dev/datasketches/memory/2.2.0-RC1/apache-datasketches-memory-2.2.0-src/docs/img/eclipse-java-compiler-arguments-2.png
------------------------------------------------------------------------------
svn:mime-type = application/octet-stream
Added:
dev/datasketches/memory/2.2.0-RC1/apache-datasketches-memory-2.2.0-src/docs/img/eclipse-project-structure.png
==============================================================================
Binary file - no diff available.
Propchange:
dev/datasketches/memory/2.2.0-RC1/apache-datasketches-memory-2.2.0-src/docs/img/eclipse-project-structure.png
------------------------------------------------------------------------------
svn:executable = *
Propchange:
dev/datasketches/memory/2.2.0-RC1/apache-datasketches-memory-2.2.0-src/docs/img/eclipse-project-structure.png
------------------------------------------------------------------------------
svn:mime-type = application/octet-stream
Added:
dev/datasketches/memory/2.2.0-RC1/apache-datasketches-memory-2.2.0-src/docs/img/intellij-java-compiler-arguments.png
==============================================================================
Binary file - no diff available.
Propchange:
dev/datasketches/memory/2.2.0-RC1/apache-datasketches-memory-2.2.0-src/docs/img/intellij-java-compiler-arguments.png
------------------------------------------------------------------------------
svn:executable = *
Propchange:
dev/datasketches/memory/2.2.0-RC1/apache-datasketches-memory-2.2.0-src/docs/img/intellij-java-compiler-arguments.png
------------------------------------------------------------------------------
svn:mime-type = application/octet-stream
Added:
dev/datasketches/memory/2.2.0-RC1/apache-datasketches-memory-2.2.0-src/docs/img/intellij-project-structure.png
==============================================================================
Binary file - no diff available.
Propchange:
dev/datasketches/memory/2.2.0-RC1/apache-datasketches-memory-2.2.0-src/docs/img/intellij-project-structure.png
------------------------------------------------------------------------------
svn:executable = *
Propchange:
dev/datasketches/memory/2.2.0-RC1/apache-datasketches-memory-2.2.0-src/docs/img/intellij-project-structure.png
------------------------------------------------------------------------------
svn:mime-type = application/octet-stream
Added:
dev/datasketches/memory/2.2.0-RC1/apache-datasketches-memory-2.2.0-src/docs/img/mr-jar-manifest.png
==============================================================================
Binary file - no diff available.
Propchange:
dev/datasketches/memory/2.2.0-RC1/apache-datasketches-memory-2.2.0-src/docs/img/mr-jar-manifest.png
------------------------------------------------------------------------------
svn:executable = *
Propchange:
dev/datasketches/memory/2.2.0-RC1/apache-datasketches-memory-2.2.0-src/docs/img/mr-jar-manifest.png
------------------------------------------------------------------------------
svn:mime-type = application/octet-stream
Added:
dev/datasketches/memory/2.2.0-RC1/apache-datasketches-memory-2.2.0-src/docs/img/mr-jar-sources.png
==============================================================================
Binary file - no diff available.
Propchange:
dev/datasketches/memory/2.2.0-RC1/apache-datasketches-memory-2.2.0-src/docs/img/mr-jar-sources.png
------------------------------------------------------------------------------
svn:executable = *
Propchange:
dev/datasketches/memory/2.2.0-RC1/apache-datasketches-memory-2.2.0-src/docs/img/mr-jar-sources.png
------------------------------------------------------------------------------
svn:mime-type = application/octet-stream
Added:
dev/datasketches/memory/2.2.0-RC1/apache-datasketches-memory-2.2.0-src/docs/intellij.md
==============================================================================
---
dev/datasketches/memory/2.2.0-RC1/apache-datasketches-memory-2.2.0-src/docs/intellij.md
(added)
+++
dev/datasketches/memory/2.2.0-RC1/apache-datasketches-memory-2.2.0-src/docs/intellij.md
Tue May 21 21:11:49 2024
@@ -0,0 +1,75 @@
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements. See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership. The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied. See the License for the
+ specific language governing permissions and limitations
+ under the License.
+-->
+
+# IntelliJ IDE Setup
+
+The use of Maven submodules to build a Multi Release JAR was motivated by its
compatibility with
+popular IDEs.
+
+There are two configuration properties to be aware of when configuring your
local development
+environment:
+
+1) Java compiler versions
+2) Compiler arguments for JPMS
+
+#### Java compiler versions
+
+Settings are usually synchronised with maven toolchain configuration,
otherwise the Java version
+for a maven module should be set as follows:
+
+| Maven submodule | JDK |
+| -------------------------- | --- |
+| datasketches-memory | 8 |
+| datasketches-memory-java8 | 8 |
+| datasketches-memory-java11 | 11 |
+
+#### Compiler arguments for JPMS
+
+In order to compile Maven modules in Java versions 11 and above, it is
necessary to provide the
+following arguments to the compiler. These are usually synchronised with the
`pom.xml`
+configuration:
+
+```xml
+ <compilerArgs>
+ <arg>--add-exports</arg>
+ <arg>java.base/jdk.internal.ref=org.apache.datasketches.memory</arg>
+ </compilerArgs>
+```
+
+---
+
+## Running Datasketches-Memory in IntelliJ-IDEA
+
+Note that the following configuration was verified using IntelliJ IDEA
2021.1.2
+(Community Edition).
+
+### Java compiler versions
+
+Ensure that the correct SDK is used for each module using the IntelliJ project
structure dialog:
+
+
+
+---
+
+### Compiler arguments for JPMS
+
+Ensure that the required JPMS arguments are set for the compiler (Java 11
only).
+These should be detected and set automatically based on the `pom.xml`
configuration.
+
+
Propchange:
dev/datasketches/memory/2.2.0-RC1/apache-datasketches-memory-2.2.0-src/docs/intellij.md
------------------------------------------------------------------------------
svn:executable = *
Added:
dev/datasketches/memory/2.2.0-RC1/apache-datasketches-memory-2.2.0-src/docs/maven-toolchains.md
==============================================================================
---
dev/datasketches/memory/2.2.0-RC1/apache-datasketches-memory-2.2.0-src/docs/maven-toolchains.md
(added)
+++
dev/datasketches/memory/2.2.0-RC1/apache-datasketches-memory-2.2.0-src/docs/maven-toolchains.md
Tue May 21 21:11:49 2024
@@ -0,0 +1,79 @@
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements. See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership. The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied. See the License for the
+ specific language governing permissions and limitations
+ under the License.
+-->
+
+# Maven Toolchains Configuration
+
+From the [maven-toolchain-plugin
documentation](https://maven.apache.org/plugins/maven-toolchains-plugin/usage.html):
+
+> A Toolchain is an object that Maven plugins can use to retrieve
preconfigured tools
+> (including location and other information).
+> With the jdk toolchain, for example, instead of being stuck with the JDK
used to run Maven,
+> all plugins can use the same or other JDK instances without hardcoding
absolute paths
+> into the pom.xml and without configuring every plugin that require a path to
JDK tools.
+
+
+### Motivation
+
+Toolchains are used in different maven modules to ensure that the correct Java
compiler version
+is used when compiling source files. This is because Datasketches Memory uses
some JDK
+version-specific APIs, which require different JDKs to compile correctly.
+
+### Toolchains template
+
+Your local environment requires toolchain entries for Java 8 and 11 to build
this project.
+These can be found in a reference `toolchains.xml` template in the `tools`
directory.
+Any maven commands used during development can be supplemented with:
+`--toolchains tools/toolchains.xml`, without permanently modifying the local
+`~/.m2/toolchains.xml` file.
+
+Alternatively, to avoid having to add this extra argument to every Maven
command,
+the toolchain template can be copied to your local maven `toolchains.xml`,
+e.g. `~/.m2/toolchains.xml`. If there is already a locally configured
`toolchains.xml` file,
+the requisite entries should be merged into the existing file if they do not
already exist.
+
+### Environment variables
+
+In order to compile the project using Maven toolchains, the following
environment variables should be set as follows:
+
+| Environment variable | Value |
+| --------------------------------- | ------------------------------------- |
+| JAVA8_HOME | Home directory for Java 8 (openJDK) |
+| JAVA11_HOME | Home directory for Java 11 (openJDK) |
+
+For example, if you are using [SDKMAN!](https://sdkman.io/), your environment
+might be configured as follows:
+
+- JAVA8_HOME: `/Users/me/.sdkman/candidates/java/8.0.282.hs-adpt`
+- JAVA11_HOME: `/Users/me/.sdkman/candidates/java/11.0.10.hs-adpt`
+
+#### For MacOS or Linux variants
+Users can discover what JDKs have been loaded into their environment by using
the following
+command:
+
+ /usr/libexec/java_home -V
+
+### Eclipse configuration
+
+If you are an Eclipse user, you may need further configuration for your IDE to
use the
+appropriate JDK for each module - see the [Eclipse IDE Setup](eclipse.md).
+
+### IntelliJ configuration
+
+Similarly, if you are an IntelliJ user, you may need further configuration for
your IDE to use the
+appropriate JDK for each module - see the [IntelliJ IDE Setup](intellij.md).
Propchange:
dev/datasketches/memory/2.2.0-RC1/apache-datasketches-memory-2.2.0-src/docs/maven-toolchains.md
------------------------------------------------------------------------------
svn:executable = *
Added:
dev/datasketches/memory/2.2.0-RC1/apache-datasketches-memory-2.2.0-src/docs/maven.md
==============================================================================
---
dev/datasketches/memory/2.2.0-RC1/apache-datasketches-memory-2.2.0-src/docs/maven.md
(added)
+++
dev/datasketches/memory/2.2.0-RC1/apache-datasketches-memory-2.2.0-src/docs/maven.md
Tue May 21 21:11:49 2024
@@ -0,0 +1,50 @@
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements. See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership. The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied. See the License for the
+ specific language governing permissions and limitations
+ under the License.
+-->
+
+# Maven Configuration: Multi-Module Project
+
+This project is a multi-module Maven project. A multi-module Maven project
consists of an
+aggregator project (the `datasketches-memory` project), together with a set of
submodules.
+The aggregator's configuration is inherited by each submodule, thus reducing
duplication.
+
+Datasketches Memory makes use of some features of the Java platform, for
example, `Unsafe`,
+which have evolved in Java versions 9 and above. Therefore, a multi-module
project allows us to
+add support for later versions of Java by using independent Maven modules to
target
+platform-specific APIs. For example, to deallocate references a
`sun.misc.Cleaner` will be used
+in Java8, but the `jdk.internal.ref.Cleaner` is used in Java 11.
+
+This project has been divided into the following submodules:
+
+* datasketches-memory-java8 (base version of the JVM that is currently
supported)
+* datasketches-memory-java11 (Java11 equivalent of some platform specific
classes in
+
+### Artifact assembly
+
+During the Maven package phase, the [Maven exec
plugin](https://www.mojohaus.org/exec-maven-plugin/index.html)
+invokes a custom bash script `package-mr-jar.sh` located in the
`tools/scripts` directory.
+This script assembles sources and compiled classes from the individual maven
modules into
+a coherent set of JARs that appear to the end user to originate from a single
module.
+
+The following jars are assembled by the bash package script:
+
+* datasketches-memory-X.Y.Z.jar The compiled main class files.
+* datasketches-memory-X.Y.Z-tests.jar The compiled test class files.
+* datasketches-memory-X.Y.Z-sources.jar The main source files.
+* datasketches-memory-X.Y.Z-test-sources.jar The test source files
+* datasketches-memory-X.Y.Z-javadoc.jar The compressed Javadocs.
Propchange:
dev/datasketches/memory/2.2.0-RC1/apache-datasketches-memory-2.2.0-src/docs/maven.md
------------------------------------------------------------------------------
svn:executable = *
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]