Skip to content

Commit cabf9ca

Browse files
committed
More comprehensive tests.
Brought coverage from 90% to 95.7%
1 parent b55af70 commit cabf9ca

File tree

7 files changed

+262
-140
lines changed

7 files changed

+262
-140
lines changed

src/main/java/org/apache/datasketches/memory/internal/NativeWritableBufferImpl.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,10 +41,10 @@ final class NativeWritableBufferImpl extends WritableBufferImpl {
4141

4242
//Pass-through ctor
4343
NativeWritableBufferImpl(
44-
final Arena arena,
4544
final MemorySegment seg,
4645
final int typeId,
47-
final MemoryRequestServer memReqSvr) {
46+
final MemoryRequestServer memReqSvr,
47+
final Arena arena) {
4848
super(seg, typeId, memReqSvr, arena);
4949
}
5050

src/main/java/org/apache/datasketches/memory/internal/ResourceImpl.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -220,7 +220,7 @@ static final WritableBuffer selectBuffer(
220220
final MemoryRequestServer memReqSvr2 = (byteBufferType || mapType) ? null : memReqSvr;
221221
final WritableBuffer wbuf;
222222
if (nativeBOType) {
223-
wbuf = new NativeWritableBufferImpl(null, segment, type, memReqSvr2);
223+
wbuf = new NativeWritableBufferImpl(segment, type, memReqSvr2, null);
224224
} else { //non-native BO
225225
wbuf = new NonNativeWritableBufferImpl(segment, type, memReqSvr2, null);
226226
}

src/main/java/org/apache/datasketches/memory/internal/WritableBufferImpl.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,7 @@ public static WritableBuffer wrapByteBuffer(
9090
type |= NONNATIVE_BO;
9191
wbuf = new NonNativeWritableBufferImpl(seg, type, memReqSvr, null);
9292
} else {
93-
wbuf = new NativeWritableBufferImpl(null, seg, type, memReqSvr);
93+
wbuf = new NativeWritableBufferImpl(seg, type, memReqSvr, null);
9494
}
9595
wbuf.setStartPositionEnd(0, byteBuffer.position(), byteBuffer.limit());
9696
return wbuf;

src/test/java/org/apache/datasketches/memory/internal/NonNativeWritableBufferImplTest.java

Lines changed: 119 additions & 69 deletions
Original file line numberDiff line numberDiff line change
@@ -19,15 +19,17 @@
1919

2020
package org.apache.datasketches.memory.internal;
2121

22-
import static org.apache.datasketches.memory.internal.NonNativeWritableMemoryImplTest.doubleReverseBytes;
23-
import static org.apache.datasketches.memory.internal.NonNativeWritableMemoryImplTest.floatReverseBytes;
24-
import static org.apache.datasketches.memory.internal.ResourceImpl.NATIVE_BYTE_ORDER;
25-
import static org.apache.datasketches.memory.internal.ResourceImpl.NON_NATIVE_BYTE_ORDER;
22+
import static org.apache.datasketches.memory.internal.UtilForTest.CB;
23+
import static org.apache.datasketches.memory.internal.UtilForTest.DB;
24+
import static org.apache.datasketches.memory.internal.UtilForTest.FB;
25+
import static org.apache.datasketches.memory.internal.UtilForTest.IB;
26+
import static org.apache.datasketches.memory.internal.UtilForTest.LB;
27+
import static org.apache.datasketches.memory.internal.UtilForTest.NBO;
28+
import static org.apache.datasketches.memory.internal.UtilForTest.NNBO;
29+
import static org.apache.datasketches.memory.internal.UtilForTest.SB;
2630
import static org.testng.Assert.assertEquals;
2731
import static org.testng.Assert.assertTrue;
2832

29-
import java.nio.ByteOrder;
30-
3133
import org.apache.datasketches.memory.Buffer;
3234
import org.apache.datasketches.memory.Memory;
3335
import org.apache.datasketches.memory.WritableBuffer;
@@ -43,26 +45,34 @@ public class NonNativeWritableBufferImplTest {
4345

4446
@Test
4547
public void checkPutGetNonNativeCharacters() {
46-
char[] srcArray = { 1, 2, 3, 4, 5, 6, 7, 8 };
48+
char[] srcArray = { 'a','b','c','d','e','f','g','h' };
4749
final int len = srcArray.length;
4850
final int half = len / 2;
49-
WritableBuffer wbuf = WritableMemory.allocate(len * Character.BYTES, NON_NATIVE_BYTE_ORDER).asWritableBuffer();
50-
wbuf.putCharArray(srcArray, 0, half);
51-
wbuf.putCharArray(srcArray, half, half);
51+
final int qtr = len / 4;
52+
WritableBuffer wbuf = WritableMemory.allocate(len * CB, NNBO).asWritableBuffer();
53+
//put
54+
wbuf.putCharArray(srcArray, 0, qtr); //put*Array(src[], srcOff, len)
55+
wbuf.putChar(qtr * CB, srcArray[qtr]); //put*(add, value)
56+
wbuf.putChar((qtr + 1) * CB, srcArray[qtr + 1]); //put*(add, value)
57+
wbuf.setPosition(half * CB);
58+
for (int i = half; i < len; i++) { wbuf.putChar(srcArray[i]); } //put*(value)
5259
wbuf.resetPosition();
5360
//confirm
54-
WritableBuffer wbuf2 = WritableMemory.allocate(len * Character.BYTES, NATIVE_BYTE_ORDER).asWritableBuffer();
55-
for (int i = 0; i < len * Character.BYTES; i++) { wbuf2.putByte(wbuf.getByte()); }
61+
WritableBuffer wbuf2 = WritableMemory.allocate(len * CB, NBO).asWritableBuffer();
62+
for (int i = 0; i < len * CB; i++) { wbuf2.putByte(wbuf.getByte()); }
5663
wbuf.resetPosition();
5764
wbuf2.resetPosition();
5865
for (int i = 0; i < len; i++) {
5966
assertTrue(srcArray[i] == Character.reverseBytes(wbuf2.getChar()));
6067
}
61-
wbuf2.resetPosition();
6268
//get
69+
wbuf2.resetPosition();
6370
char[] dstArray = new char[len];
64-
wbuf.getCharArray(dstArray, 0, half);
65-
wbuf.getCharArray(dstArray, half, half);
71+
wbuf.getCharArray(dstArray, 0, qtr); //get*Array(dst[], dstOff, len)
72+
dstArray[qtr] = wbuf.getChar(qtr * CB); //get*(add)
73+
dstArray[qtr + 1] = wbuf.getChar((qtr + 1) * CB); //get*(add)
74+
wbuf.setPosition(half * CB);
75+
for (int i = half; i < len; i++) { dstArray[i] = wbuf.getChar(); } //get*()
6676
assertEquals(srcArray, dstArray);
6777
}
6878

@@ -71,23 +81,31 @@ public void checkPutGetNonNativeDoubles() {
7181
double[] srcArray = { 1, 2, 3, 4, 5, 6, 7, 8 };
7282
final int len = srcArray.length;
7383
final int half = len / 2;
74-
WritableBuffer wbuf = WritableMemory.allocate(len * Double.BYTES, NON_NATIVE_BYTE_ORDER).asWritableBuffer();
75-
wbuf.putDoubleArray(srcArray, 0, half);
76-
wbuf.putDoubleArray(srcArray, half, half);
84+
final int qtr = len / 4;
85+
WritableBuffer wbuf = WritableMemory.allocate(len * DB, NNBO).asWritableBuffer();
86+
//put
87+
wbuf.putDoubleArray(srcArray, 0, qtr); //put*Array(src[], srcOff, len)
88+
wbuf.putDouble(qtr * DB, srcArray[qtr]); //put*(add, value)
89+
wbuf.putDouble((qtr + 1) * DB, srcArray[qtr + 1]); //put*(add, value)
90+
wbuf.setPosition(half * DB);
91+
for (int i = half; i < len; i++) { wbuf.putDouble(srcArray[i]); } //put*(value)
7792
wbuf.resetPosition();
7893
//confirm
79-
WritableBuffer wbuf2 = WritableMemory.allocate(len * Double.BYTES, NATIVE_BYTE_ORDER).asWritableBuffer();
80-
for (int i = 0; i < len * Double.BYTES; i++) { wbuf2.putByte(wbuf.getByte()); }
94+
WritableBuffer wbuf2 = WritableMemory.allocate(len * DB, NBO).asWritableBuffer();
95+
for (int i = 0; i < len * DB; i++) { wbuf2.putByte(wbuf.getByte()); }
8196
wbuf.resetPosition();
8297
wbuf2.resetPosition();
8398
for (int i = 0; i < len; i++) {
84-
assertTrue(srcArray[i] == doubleReverseBytes(wbuf2.getDouble()));
99+
assertTrue(srcArray[i] == UtilForTest.doubleReverseBytes(wbuf2.getDouble()));
85100
}
86-
wbuf2.resetPosition();
87101
//get
102+
wbuf2.resetPosition();
88103
double[] dstArray = new double[len];
89-
wbuf.getDoubleArray(dstArray, 0, half);
90-
wbuf.getDoubleArray(dstArray, half, half);
104+
wbuf.getDoubleArray(dstArray, 0, qtr); //get*Array(dst[], dstOff, len)
105+
dstArray[qtr] = wbuf.getDouble(qtr * DB); //get*(add)
106+
dstArray[qtr + 1] = wbuf.getDouble((qtr + 1) * DB); //get*(add)
107+
wbuf.setPosition(half * DB);
108+
for (int i = half; i < len; i++) { dstArray[i] = wbuf.getDouble(); } //get*()
91109
assertEquals(srcArray, dstArray);
92110
}
93111

@@ -96,23 +114,31 @@ public void checkPutGetNonNativeFloats() {
96114
float[] srcArray = { 1, 2, 3, 4, 5, 6, 7, 8 };
97115
final int len = srcArray.length;
98116
final int half = len / 2;
99-
WritableBuffer wbuf = WritableMemory.allocate(len * Float.BYTES, NON_NATIVE_BYTE_ORDER).asWritableBuffer();
100-
wbuf.putFloatArray(srcArray, 0, half);
101-
wbuf.putFloatArray(srcArray, half, half);
117+
final int qtr = len / 4;
118+
WritableBuffer wbuf = WritableMemory.allocate(len * FB, NNBO).asWritableBuffer();
119+
//put
120+
wbuf.putFloatArray(srcArray, 0, qtr); //put*Array(src[], srcOff, len)
121+
wbuf.putFloat(qtr * FB, srcArray[qtr]); //put*(add, value)
122+
wbuf.putFloat((qtr + 1) * FB, srcArray[qtr + 1]); //put*(add, value)
123+
wbuf.setPosition(half * FB);
124+
for (int i = half; i < len; i++) { wbuf.putFloat(srcArray[i]); } //put*(value)
102125
wbuf.resetPosition();
103126
//confirm
104-
WritableBuffer wbuf2 = WritableMemory.allocate(len * Float.BYTES, NATIVE_BYTE_ORDER).asWritableBuffer();
105-
for (int i = 0; i < len * Float.BYTES; i++) { wbuf2.putByte(wbuf.getByte()); }
127+
WritableBuffer wbuf2 = WritableMemory.allocate(len * FB, NBO).asWritableBuffer();
128+
for (int i = 0; i < len * FB; i++) { wbuf2.putByte(wbuf.getByte()); }
106129
wbuf.resetPosition();
107130
wbuf2.resetPosition();
108131
for (int i = 0; i < len; i++) {
109-
assertTrue(srcArray[i] == floatReverseBytes(wbuf2.getFloat()));
132+
assertTrue(srcArray[i] == UtilForTest.floatReverseBytes(wbuf2.getFloat()));
110133
}
111-
wbuf2.resetPosition();
112134
//get
135+
wbuf2.resetPosition();
113136
float[] dstArray = new float[len];
114-
wbuf.getFloatArray(dstArray, 0, half);
115-
wbuf.getFloatArray(dstArray, half, half);
137+
wbuf.getFloatArray(dstArray, 0, qtr); //get*Array(dst[], dstOff, len)
138+
dstArray[qtr] = wbuf.getFloat(qtr * FB); //get*(add)
139+
dstArray[qtr + 1] = wbuf.getFloat((qtr + 1) * FB); //get*(add)
140+
wbuf.setPosition(half * FB);
141+
for (int i = half; i < len; i++) { dstArray[i] = wbuf.getFloat(); } //get*()
116142
assertEquals(srcArray, dstArray);
117143
}
118144

@@ -121,23 +147,31 @@ public void checkPutGetNonNativeInts() {
121147
int[] srcArray = { 1, 2, 3, 4, 5, 6, 7, 8 };
122148
final int len = srcArray.length;
123149
final int half = len / 2;
124-
WritableBuffer wbuf = WritableMemory.allocate(len * Integer.BYTES, NON_NATIVE_BYTE_ORDER).asWritableBuffer();
125-
wbuf.putIntArray(srcArray, 0, half);
126-
wbuf.putIntArray(srcArray, half, half);
150+
final int qtr = len / 4;
151+
WritableBuffer wbuf = WritableMemory.allocate(len * IB, NNBO).asWritableBuffer();
152+
//put
153+
wbuf.putIntArray(srcArray, 0, qtr); //put*Array(src[], srcOff, len)
154+
wbuf.putInt(qtr * IB, srcArray[qtr]); //put*(add, value)
155+
wbuf.putInt((qtr + 1) * IB, srcArray[qtr + 1]); //put*(add, value)
156+
wbuf.setPosition(half * IB);
157+
for (int i = half; i < len; i++) { wbuf.putInt(srcArray[i]); } //put*(value)
127158
wbuf.resetPosition();
128159
//confirm
129-
WritableBuffer wbuf2 = WritableMemory.allocate(len * Integer.BYTES, NATIVE_BYTE_ORDER).asWritableBuffer();
130-
for (int i = 0; i < len * Integer.BYTES; i++) { wbuf2.putByte(wbuf.getByte()); }
160+
WritableBuffer wbuf2 = WritableMemory.allocate(len * IB, NBO).asWritableBuffer();
161+
for (int i = 0; i < len * IB; i++) { wbuf2.putByte(wbuf.getByte()); }
131162
wbuf.resetPosition();
132163
wbuf2.resetPosition();
133164
for (int i = 0; i < len; i++) {
134165
assertTrue(srcArray[i] == Integer.reverseBytes(wbuf2.getInt()));
135166
}
136-
wbuf2.resetPosition();
137167
//get
168+
wbuf2.resetPosition();
138169
int[] dstArray = new int[len];
139-
wbuf.getIntArray(dstArray, 0, half);
140-
wbuf.getIntArray(dstArray, half, half);
170+
wbuf.getIntArray(dstArray, 0, qtr); //get*Array(dst[], dstOff, len)
171+
dstArray[qtr] = wbuf.getInt(qtr * IB); //get*(add)
172+
dstArray[qtr + 1] = wbuf.getInt((qtr + 1) * IB); //get*(add)
173+
wbuf.setPosition(half * IB);
174+
for (int i = half; i < len; i++) { dstArray[i] = wbuf.getInt(); } //get*()
141175
assertEquals(srcArray, dstArray);
142176
}
143177

@@ -146,23 +180,31 @@ public void checkPutGetNonNativeLongs() {
146180
long[] srcArray = { 1, 2, 3, 4, 5, 6, 7, 8 };
147181
final int len = srcArray.length;
148182
final int half = len / 2;
149-
WritableBuffer wbuf = WritableMemory.allocate(len * Long.BYTES, NON_NATIVE_BYTE_ORDER).asWritableBuffer();
150-
wbuf.putLongArray(srcArray, 0, half);
151-
wbuf.putLongArray(srcArray, half, half);
183+
final int qtr = len / 4;
184+
WritableBuffer wbuf = WritableMemory.allocate(len * LB, NNBO).asWritableBuffer();
185+
//put
186+
wbuf.putLongArray(srcArray, 0, qtr); //put*Array(src[], srcOff, len)
187+
wbuf.putLong(qtr * LB, srcArray[qtr]); //put*(add, value)
188+
wbuf.putLong((qtr + 1) * LB, srcArray[qtr + 1]); //put*(add, value)
189+
wbuf.setPosition(half * LB);
190+
for (int i = half; i < len; i++) { wbuf.putLong(srcArray[i]); } //put*(value)
152191
wbuf.resetPosition();
153192
//confirm
154-
WritableBuffer wbuf2 = WritableMemory.allocate(len * Long.BYTES, NATIVE_BYTE_ORDER).asWritableBuffer();
155-
for (int i = 0; i < len * Long.BYTES; i++) { wbuf2.putByte(wbuf.getByte()); }
193+
WritableBuffer wbuf2 = WritableMemory.allocate(len * LB, NBO).asWritableBuffer();
194+
for (int i = 0; i < len * LB; i++) { wbuf2.putByte(wbuf.getByte()); }
156195
wbuf.resetPosition();
157196
wbuf2.resetPosition();
158197
for (int i = 0; i < len; i++) {
159198
assertTrue(srcArray[i] == Long.reverseBytes(wbuf2.getLong()));
160199
}
161-
wbuf2.resetPosition();
162200
//get
201+
wbuf2.resetPosition();
163202
long[] dstArray = new long[len];
164-
wbuf.getLongArray(dstArray, 0, half);
165-
wbuf.getLongArray(dstArray, half, half);
203+
wbuf.getLongArray(dstArray, 0, qtr); //get*Array(dst[], dstOff, len)
204+
dstArray[qtr] = wbuf.getLong(qtr * LB); //get*(add)
205+
dstArray[qtr + 1] = wbuf.getLong((qtr + 1) * LB); //get*(add)
206+
wbuf.setPosition(half * LB);
207+
for (int i = half; i < len; i++) { dstArray[i] = wbuf.getLong(); } //get*()
166208
assertEquals(srcArray, dstArray);
167209
}
168210

@@ -171,72 +213,80 @@ public void checkPutGetNonNativeShorts() {
171213
short[] srcArray = { 1, 2, 3, 4, 5, 6, 7, 8 };
172214
final int len = srcArray.length;
173215
final int half = len / 2;
174-
WritableBuffer wbuf = WritableMemory.allocate(len * Short.BYTES, NON_NATIVE_BYTE_ORDER).asWritableBuffer();
175-
wbuf.putShortArray(srcArray, 0, half);
176-
wbuf.putShortArray(srcArray, half, half);
216+
final int qtr = len / 4;
217+
WritableBuffer wbuf = WritableMemory.allocate(len * SB, NNBO).asWritableBuffer();
218+
//put
219+
wbuf.putShortArray(srcArray, 0, qtr); //put*Array(src[], srcOff, len)
220+
wbuf.putShort(qtr * SB, srcArray[qtr]); //put*(add, value)
221+
wbuf.putShort((qtr + 1) * SB, srcArray[qtr + 1]); //put*(add, value)
222+
wbuf.setPosition(half * SB);
223+
for (int i = half; i < len; i++) { wbuf.putShort(srcArray[i]); } //put*(value)
177224
wbuf.resetPosition();
178225
//confirm
179-
WritableBuffer wbuf2 = WritableMemory.allocate(len * Short.BYTES, NATIVE_BYTE_ORDER).asWritableBuffer();
180-
for (int i = 0; i < len * Short.BYTES; i++) { wbuf2.putByte(wbuf.getByte()); }
226+
WritableBuffer wbuf2 = WritableMemory.allocate(len * SB, NBO).asWritableBuffer();
227+
for (int i = 0; i < len * SB; i++) { wbuf2.putByte(wbuf.getByte()); }
181228
wbuf.resetPosition();
182229
wbuf2.resetPosition();
183230
for (int i = 0; i < len; i++) {
184231
assertTrue(srcArray[i] == Short.reverseBytes(wbuf2.getShort()));
185232
}
186-
wbuf2.resetPosition();
187233
//get
234+
wbuf2.resetPosition();
188235
short[] dstArray = new short[len];
189-
wbuf.getShortArray(dstArray, 0, half);
190-
wbuf.getShortArray(dstArray, half, half);
236+
wbuf.getShortArray(dstArray, 0, qtr); //get*Array(dst[], dstOff, len)
237+
dstArray[qtr] = wbuf.getShort(qtr * SB); //get*(add)
238+
dstArray[qtr + 1] = wbuf.getShort((qtr + 1) * SB); //get*(add)
239+
wbuf.setPosition(half * SB);
240+
for (int i = half; i < len; i++) { dstArray[i] = wbuf.getShort(); } //get*()
191241
assertEquals(srcArray, dstArray);
192242
}
193243

194244
//check Duplicate, Region
195245
@Test
196246
public void checkDuplicate() {
197247
byte[] bArr = new byte[8];
198-
WritableMemory wmem = WritableMemory.writableWrap(bArr, NON_NATIVE_BYTE_ORDER);
248+
WritableMemory wmem = WritableMemory.writableWrap(bArr, NNBO);
199249
WritableBuffer wbuf = wmem.asWritableBuffer();
200250
WritableBuffer wdup = wbuf.writableDuplicate();
201-
assertEquals(wdup.getTypeByteOrder(), NON_NATIVE_BYTE_ORDER);
251+
assertEquals(wdup.getTypeByteOrder(), NNBO);
202252

203253
WritableBuffer wreg = wbuf.writableRegion();
204-
assertEquals(wreg.getTypeByteOrder(), NON_NATIVE_BYTE_ORDER);
254+
assertEquals(wreg.getTypeByteOrder(), NNBO);
205255
}
206256

207257
@Test
208258
public void checkConversionByteOrder() {
209259
byte[] bArr = new byte[8];
210260
bArr[1] = 1;
211-
WritableMemory wmem = WritableMemory.writableWrap(bArr, NON_NATIVE_BYTE_ORDER);
212-
assertEquals(wmem.getTypeByteOrder(), NON_NATIVE_BYTE_ORDER);
261+
WritableMemory wmem = WritableMemory.writableWrap(bArr, NNBO);
262+
assertEquals(wmem.getTypeByteOrder(), NNBO);
213263
assertEquals(wmem.getChar(0), 1);
214264

215265
Buffer buf = wmem.asBuffer();
216-
assertEquals(buf.getTypeByteOrder(), NON_NATIVE_BYTE_ORDER); //
266+
assertEquals(buf.getTypeByteOrder(), NNBO); //
217267
assertEquals(buf.getChar(0), 1);
218268

219269
Buffer dup = buf.duplicate();
220-
assertEquals(dup.getTypeByteOrder(), NON_NATIVE_BYTE_ORDER);
270+
assertEquals(dup.getTypeByteOrder(), NNBO);
221271
assertEquals(dup.getChar(0), 1);
222272

223273
Buffer reg = buf.region();
224-
assertEquals(reg.getTypeByteOrder(), NON_NATIVE_BYTE_ORDER);
274+
assertEquals(reg.getTypeByteOrder(), NNBO);
225275
assertEquals(reg.getChar(0), 1);
226276

227277
Memory mem = reg.asMemory();
228-
assertEquals(mem.getTypeByteOrder(), NON_NATIVE_BYTE_ORDER);
278+
assertEquals(mem.getTypeByteOrder(), NNBO);
229279
assertEquals(mem.getChar(0), 1);
230280

231281
Memory mreg = mem.region(0, 8);
232-
assertEquals(mreg.getTypeByteOrder(), NON_NATIVE_BYTE_ORDER);
282+
assertEquals(mreg.getTypeByteOrder(), NNBO);
233283
assertEquals(mreg.getChar(0), 1);
234284
}
235285

236286
@Test
237287
public void checkPutIntArray() {
238-
WritableMemory wmem = WritableMemory.allocate(12, NON_NATIVE_BYTE_ORDER);
239-
WritableBuffer wbuf = wmem.asWritableBuffer(NON_NATIVE_BYTE_ORDER);
288+
WritableMemory wmem = WritableMemory.allocate(12, NNBO);
289+
WritableBuffer wbuf = wmem.asWritableBuffer(NNBO);
240290

241291
wbuf.putInt(1);
242292
int[] array = new int[] { 2 };

0 commit comments

Comments
 (0)