2020package org .apache .datasketches .memory .internal ;
2121
2222import java .lang .foreign .Arena ;
23- import static org .apache .datasketches .memory .internal .ResourceImpl .NON_NATIVE_BYTE_ORDER ;
23+ import static org .apache .datasketches .memory .internal .UtilForTest .CB ;
24+ import static org .apache .datasketches .memory .internal .UtilForTest .DB ;
25+ import static org .apache .datasketches .memory .internal .UtilForTest .FB ;
26+ import static org .apache .datasketches .memory .internal .UtilForTest .IB ;
27+ import static org .apache .datasketches .memory .internal .UtilForTest .LB ;
28+ import static org .apache .datasketches .memory .internal .UtilForTest .NBO ;
29+ import static org .apache .datasketches .memory .internal .UtilForTest .NNBO ;
30+ import static org .apache .datasketches .memory .internal .UtilForTest .SB ;
2431import static org .testng .Assert .assertEquals ;
2532import static org .testng .Assert .assertFalse ;
2633import static org .testng .Assert .assertNotNull ;
3845import org .testng .Assert ;
3946import org .testng .annotations .Test ;
4047
48+ /**
49+ * @author Lee Rhodes
50+ */
4151public class NativeWritableBufferImplTest {
4252 private static final MemoryRequestServer memReqSvr = Resource .defaultMemReqSvr ;
4353
@@ -55,239 +65,170 @@ public void checkNativeCapacityAndClose() throws Exception {
5565 try { wmem .getArena ().close (); } catch (IllegalStateException e ) { }
5666 }
5767
58- //Simple Heap arrays
68+ //Check primitives
5969
6070 @ Test
61- public void checkGetByteArray () {
62- byte [] srcArray = { 1 , - 2 , 3 , - 4 , 5 , - 6 , 7 , - 8 };
71+ public void checkPutGetBooleans () {
72+ boolean [] srcArray = {true , false , true , false , false , true , false , true };
6373 final int len = srcArray .length ;
6474 final int half = len / 2 ;
65- byte [] dstArray = new byte [len ];
66-
67- Buffer buf = Memory .wrap (srcArray ).asBuffer ();
68- buf .getByteArray (dstArray , 0 , half );
69- buf .getByteArray (dstArray , half , half );
70- assertEquals (dstArray , srcArray );
71-
72- WritableBuffer wbuf = WritableMemory .writableWrap (srcArray ).asWritableBuffer ();
73- wbuf .getByteArray (dstArray , 0 , half );
74- wbuf .getByteArray (dstArray , half , half );
75- assertEquals (dstArray , srcArray );
75+ WritableBuffer wbuf = WritableMemory .allocate (len , NBO ).asWritableBuffer ();
76+ //put
77+ for (int i = 0 ; i < half ; i ++) { wbuf .putBoolean (srcArray [i ]); } //put*(value)
78+ for (int i = half ; i < len ; i ++) { wbuf .putBoolean (i , srcArray [i ]); } //put*(add, value)
79+ wbuf .resetPosition ();
80+ //get
81+ boolean [] dstArray = new boolean [len ];
82+ for (int i = 0 ; i < half ; i ++) { dstArray [i ] = wbuf .getBoolean (); } //get*()
83+ for (int i = half ; i < len ; i ++) { dstArray [i ] = wbuf .getBoolean (i ); } //get*(add)
84+ assertEquals (srcArray , dstArray );
7685 }
7786
7887 @ Test
79- public void checkPutByteArray () {
88+ public void checkPutGetBytes () {
8089 byte [] srcArray = { 1 , -2 , 3 , -4 , 5 , -6 , 7 , -8 };
8190 final int len = srcArray .length ;
8291 final int half = len / 2 ;
83- byte [] dstArray = new byte [len ];
84-
85- WritableBuffer wbuf = WritableMemory .allocate (len * Byte .BYTES ).asWritableBuffer ();
86- wbuf .putByteArray (srcArray , 0 , half );
87- wbuf .putByteArray (srcArray , half , half );
92+ WritableBuffer wbuf = WritableMemory .allocate (len , NBO ).asWritableBuffer ();
93+ //put
94+ wbuf .putByte (srcArray [0 ]); //put*(value)
95+ wbuf .putByteArray (srcArray , 1 , 2 ); //put*Array(src[], srcOff, len)
96+ wbuf .putByte (srcArray [3 ]); //put*(value)
97+ for (int i = half ; i < len ; i ++) { wbuf .putByte (i , srcArray [i ]); } //put*(add, value)
8898 wbuf .resetPosition ();
89- wbuf .getByteArray (dstArray , 0 , len );
90- assertEquals (dstArray , srcArray );
99+ //get
100+ byte [] dstArray = new byte [len ];
101+ dstArray [0 ] = wbuf .getByte (); //get*()
102+ wbuf .getByteArray (dstArray , 1 , 2 ); //get*Array(dst[], dstOff, len)
103+ dstArray [3 ] = wbuf .getByte (); //get*()
104+ for (int i = half ; i < len ; i ++) { dstArray [i ] = wbuf .getByte (i ); } //get*(add)
105+ assertEquals (srcArray , dstArray );
91106 }
92107
93108 @ Test
94- public void checkGetCharArray () {
95- char [] srcArray = { 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 };
109+ public void checkPutGetNativeCharacters () {
110+ char [] srcArray = { 'a' , 'b' , 'c' , 'd' , 'e' , 'f' , 'g' , 'h' };
96111 final int len = srcArray .length ;
97112 final int half = len / 2 ;
113+ WritableBuffer wbuf = WritableMemory .allocate (len * CB , NBO ).asWritableBuffer ();
114+ //put
115+ wbuf .putChar (srcArray [0 ]); //put*(value)
116+ wbuf .putCharArray (srcArray , 1 , 2 ); //put*Array(src[], srcOff, len)
117+ wbuf .putChar (srcArray [3 ]); //put*(value)
118+ for (int i = half ; i < len ; i ++) { wbuf .putChar (i * CB , srcArray [i ]); } //put*(add, value)
119+ wbuf .resetPosition ();
120+ //get
98121 char [] dstArray = new char [len ];
99-
100- Buffer buf = Memory .wrap (srcArray ).asBuffer ();
101- buf .getCharArray (dstArray , 0 , half );
102- buf .getCharArray (dstArray , half , half );
103- assertEquals (dstArray , srcArray );
104-
105- WritableBuffer wbuf = WritableMemory .writableWrap (srcArray ).asWritableBuffer ();
106- wbuf .getCharArray (dstArray , 0 , half );
107- wbuf .getCharArray (dstArray , half , half );
108- assertEquals (dstArray , srcArray );
122+ dstArray [0 ] = wbuf .getChar (); //get*()
123+ wbuf .getCharArray (dstArray , 1 , 2 ); //get*Array(dst[], dstOff, len)
124+ dstArray [3 ] = wbuf .getChar (); //get*()
125+ for (int i = half ; i < len ; i ++) { dstArray [i ] = wbuf .getChar (i * CB ); } //get*(add)
126+ assertEquals (srcArray , dstArray );
109127 }
110128
111129 @ Test
112- public void checkPutCharArray () {
113- char [] srcArray = { 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 };
130+ public void checkPutGetNativeDoubles () {
131+ double [] srcArray = { 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 };
114132 final int len = srcArray .length ;
115133 final int half = len / 2 ;
116- char [] dstArray = new char [len ];
117-
118- WritableBuffer wbuf = WritableMemory .allocate (len * Character .BYTES ).asWritableBuffer ();
119- wbuf .putCharArray (srcArray , 0 , half );
120- wbuf .putCharArray (srcArray , half , half );
134+ WritableBuffer wbuf = WritableMemory .allocate (len * DB , NBO ).asWritableBuffer ();
135+ //put
136+ wbuf .putDouble (srcArray [0 ]); //put*(value)
137+ wbuf .putDoubleArray (srcArray , 1 , 2 ); //put*Array(src[], srcOff, len)
138+ wbuf .putDouble (srcArray [3 ]); //put*(value)
139+ for (int i = half ; i < len ; i ++) { wbuf .putDouble (i * DB , srcArray [i ]); } //put*(add, value)
121140 wbuf .resetPosition ();
122- wbuf .getCharArray (dstArray , 0 , len );
123- assertEquals (dstArray , srcArray );
124- }
125-
126- @ Test
127- public void checkGetShortArray () {
128- short [] srcArray = { 1 , -2 , 3 , -4 , 5 , -6 , 7 , -8 };
129- final int len = srcArray .length ;
130- final int half = len / 2 ;
131- short [] dstArray = new short [len ];
132-
133- Buffer buf = Memory .wrap (srcArray ).asBuffer ();
134- buf .getShortArray (dstArray , 0 , half );
135- buf .getShortArray (dstArray , half , half );
136- assertEquals (dstArray , srcArray );
137-
138- WritableBuffer wbuf = WritableMemory .writableWrap (srcArray ).asWritableBuffer ();
139- wbuf .getShortArray (dstArray , 0 , half );
140- wbuf .getShortArray (dstArray , half , half );
141- assertEquals (dstArray , srcArray );
141+ //get
142+ double [] dstArray = new double [len ];
143+ dstArray [0 ] = wbuf .getDouble (); //get*()
144+ wbuf .getDoubleArray (dstArray , 1 , 2 ); //get*Array(dst[], dstOff, len)
145+ dstArray [3 ] = wbuf .getDouble (); //get*()
146+ for (int i = half ; i < len ; i ++) { dstArray [i ] = wbuf .getDouble (i * DB ); } //get*(add)
147+ assertEquals (srcArray , dstArray );
142148 }
143149
144150 @ Test
145- public void checkPutShortArray () {
146- short [] srcArray = { 1 , - 2 , 3 , - 4 , 5 , - 6 , 7 , - 8 };
151+ public void checkPutGetNativeFloats () {
152+ float [] srcArray = { 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 };
147153 final int len = srcArray .length ;
148154 final int half = len / 2 ;
149- short [] dstArray = new short [len ];
150-
151- WritableBuffer wbuf = WritableMemory .allocate (len * Short .BYTES ).asWritableBuffer ();
152- wbuf .putShortArray (srcArray , 0 , half );
153- wbuf .putShortArray (srcArray , half , half );
155+ WritableBuffer wbuf = WritableMemory .allocate (len * FB , NBO ).asWritableBuffer ();
156+ //put
157+ wbuf .putFloat (srcArray [0 ]); //put*(value)
158+ wbuf .putFloatArray (srcArray , 1 , 2 ); //put*Array(src[], srcOff, len)
159+ wbuf .putFloat (srcArray [3 ]); //put*(value)
160+ for (int i = half ; i < len ; i ++) { wbuf .putFloat (i * FB , srcArray [i ]); } //put*(add, value)
154161 wbuf .resetPosition ();
155- wbuf .getShortArray (dstArray , 0 , len );
156- assertEquals (dstArray , srcArray );
162+ //get
163+ float [] dstArray = new float [len ];
164+ dstArray [0 ] = wbuf .getFloat (); //get*()
165+ wbuf .getFloatArray (dstArray , 1 , 2 ); //get*Array(dst[], dstOff, len)
166+ dstArray [3 ] = wbuf .getFloat (); //get*()
167+ for (int i = half ; i < len ; i ++) { dstArray [i ] = wbuf .getFloat (i * FB ); } //get*(add)
168+ assertEquals (srcArray , dstArray );
157169 }
158170
159171 @ Test
160- public void checkGetIntArray () {
161- int [] srcArray = { 1 , - 2 , 3 , - 4 , 5 , - 6 , 7 , - 8 };
172+ public void checkPutGetNativeInts () {
173+ int [] srcArray = { 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 };
162174 final int len = srcArray .length ;
163175 final int half = len / 2 ;
176+ WritableBuffer wbuf = WritableMemory .allocate (len * IB , NBO ).asWritableBuffer ();
177+ //put
178+ wbuf .putInt (srcArray [0 ]); //put*(value)
179+ wbuf .putIntArray (srcArray , 1 , 2 ); //put*Array(src[], srcOff, len)
180+ wbuf .putInt (srcArray [3 ]); //put*(value)
181+ for (int i = half ; i < len ; i ++) { wbuf .putInt (i * IB , srcArray [i ]); } //put*(add, value)
182+ wbuf .resetPosition ();
183+ //get
164184 int [] dstArray = new int [len ];
165-
166- Buffer buf = Memory .wrap (srcArray ).asBuffer ();
167- buf .getIntArray (dstArray , 0 , half );
168- buf .getIntArray (dstArray , half , half );
169- assertEquals (dstArray , srcArray );
170-
171- WritableBuffer wbuf = WritableMemory .writableWrap (srcArray ).asWritableBuffer ();
172- wbuf .getIntArray (dstArray , 0 , half );
173- wbuf .getIntArray (dstArray , half , half );
174- assertEquals (dstArray , srcArray );
185+ dstArray [0 ] = wbuf .getInt (); //get*()
186+ wbuf .getIntArray (dstArray , 1 , 2 ); //get*Array(dst[], dstOff, len)
187+ dstArray [3 ] = wbuf .getInt (); //get*()
188+ for (int i = half ; i < len ; i ++) { dstArray [i ] = wbuf .getInt (i * IB ); } //get*(add)
189+ assertEquals (srcArray , dstArray );
175190 }
176191
177192 @ Test
178- public void checkPutIntArray () {
179- int [] srcArray = { 1 , - 2 , 3 , - 4 , 5 , - 6 , 7 , - 8 };
193+ public void checkPutGetNativeLongs () {
194+ long [] srcArray = { 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 };
180195 final int len = srcArray .length ;
181196 final int half = len / 2 ;
182- int [] dstArray = new int [len ];
183-
184- WritableBuffer wbuf = WritableMemory .allocate (len * Integer .BYTES ).asWritableBuffer ();
185- wbuf .putIntArray (srcArray , 0 , half );
186- wbuf .putIntArray (srcArray , half , half );
197+ WritableBuffer wbuf = WritableMemory .allocate (len * LB , NNBO ).asWritableBuffer ();
198+ //put
199+ wbuf .putLong (srcArray [0 ]); //put*(value)
200+ wbuf .putLongArray (srcArray , 1 , 2 ); //put*Array(src[], srcOff, len)
201+ wbuf .putLong (srcArray [3 ]); //put*(value)
202+ for (int i = half ; i < len ; i ++) { wbuf .putLong (i * LB , srcArray [i ]); } //put*(add, value)
187203 wbuf .resetPosition ();
188- wbuf .getIntArray (dstArray , 0 , len );
189- assertEquals (dstArray , srcArray );
190- }
191-
192- @ Test
193- public void checkGetLongArray () {
194- long [] srcArray = { 1 , -2 , 3 , -4 , 5 , -6 , 7 , -8 };
195- final int len = srcArray .length ;
196- final int half = len / 2 ;
197- long [] dstArray = new long [len ];
198-
199- Buffer buf = Memory .wrap (srcArray ).asBuffer ();
200- buf .getLongArray (dstArray , 0 , half );
201- buf .getLongArray (dstArray , half , half );
202- assertEquals (dstArray , srcArray );
203-
204- WritableBuffer wbuf = WritableMemory .writableWrap (srcArray ).asWritableBuffer ();
205- wbuf .getLongArray (dstArray , 0 , half );
206- wbuf .getLongArray (dstArray , half , half );
207- assertEquals (dstArray , srcArray );
208- }
209-
210- @ Test
211- public void checkPutLongArray () {
212- long [] srcArray = { 1 , -2 , 3 , -4 , 5 , -6 , 7 , -8 };
213- final int len = srcArray .length ;
214- final int half = len / 2 ;
204+ //get
215205 long [] dstArray = new long [len ];
216-
217- WritableBuffer wbuf = WritableMemory .allocate (len * Long .BYTES ).asWritableBuffer ();
218- wbuf .putLongArray (srcArray , 0 , half );
219- wbuf .putLongArray (srcArray , half , half );
220- wbuf .resetPosition ();
221- wbuf .getLongArray (dstArray , 0 , len );
222- assertEquals (dstArray , srcArray );
223- }
224-
225- @ Test
226- public void checkGetFloatArray () {
227- float [] srcArray = { 1 , -2 , 3 , -4 , 5 , -6 , 7 , -8 };
228- final int len = srcArray .length ;
229- final int half = len / 2 ;
230- float [] dstArray = new float [len ];
231-
232- Buffer buf = Memory .wrap (srcArray ).asBuffer ();
233- buf .getFloatArray (dstArray , 0 , half );
234- buf .getFloatArray (dstArray , half , half );
235- assertEquals (dstArray , srcArray );
236-
237-
238- WritableBuffer wbuf = WritableMemory .writableWrap (srcArray ).asWritableBuffer ();
239- wbuf .getFloatArray (dstArray , 0 , half );
240- wbuf .getFloatArray (dstArray , half , half );
241- assertEquals (dstArray , srcArray );
206+ dstArray [0 ] = wbuf .getLong (); //get*()
207+ wbuf .getLongArray (dstArray , 1 , 2 ); //get*Array(dst[], dstOff, len)
208+ dstArray [3 ] = wbuf .getLong (); //get*()
209+ for (int i = half ; i < len ; i ++) { dstArray [i ] = wbuf .getLong (i * LB ); } //get*(add)
210+ assertEquals (srcArray , dstArray );
242211 }
243212
244213 @ Test
245- public void checkPutFloatArray () {
246- float [] srcArray = { 1 , - 2 , 3 , - 4 , 5 , - 6 , 7 , - 8 };
214+ public void checkPutGetNativeShorts () {
215+ short [] srcArray = { 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 };
247216 final int len = srcArray .length ;
248217 final int half = len / 2 ;
249- float [] dstArray = new float [len ];
250-
251- WritableBuffer wbuf = WritableMemory .allocate (len * Float .BYTES ).asWritableBuffer ();
252- wbuf .putFloatArray (srcArray , 0 , half );
253- wbuf .putFloatArray (srcArray , half , half );
218+ WritableBuffer wbuf = WritableMemory .allocate (len * SB , NBO ).asWritableBuffer ();
219+ //put
220+ wbuf .putShort (srcArray [0 ]); //put*(value)
221+ wbuf .putShortArray (srcArray , 1 , 2 ); //put*Array(src[], srcOff, len)
222+ wbuf .putShort (srcArray [3 ]); //put*(value)
223+ for (int i = half ; i < len ; i ++) { wbuf .putShort (i * SB , srcArray [i ]); } //put*(add, value)
254224 wbuf .resetPosition ();
255- wbuf .getFloatArray (dstArray , 0 , len );
256- assertEquals (dstArray , srcArray );
257- }
258-
259- @ Test
260- public void checkGetDoubleArray () {
261- double [] srcArray = { 1 , -2 , 3 , -4 , 5 , -6 , 7 , -8 };
262- final int len = srcArray .length ;
263- final int half = len / 2 ;
264- double [] dstArray = new double [len ];
265-
266- Buffer buf = Memory .wrap (srcArray ).asBuffer ();
267- buf .getDoubleArray (dstArray , 0 , half );
268- buf .getDoubleArray (dstArray , half , half );
269- assertEquals (dstArray , srcArray );
270-
271-
272- WritableBuffer wbuf = WritableMemory .writableWrap (srcArray ).asWritableBuffer ();
273- wbuf .getDoubleArray (dstArray , 0 , half );
274- wbuf .getDoubleArray (dstArray , half , half );
275- assertEquals (dstArray , srcArray );
276- }
277-
278- @ Test
279- public void checkPutDoubleArray () {
280- double [] srcArray = { 1 , -2 , 3 , -4 , 5 , -6 , 7 , -8 };
281- final int len = srcArray .length ;
282- final int half = len / 2 ;
283- double [] dstArray = new double [len ];
284-
285- WritableBuffer wbuf = WritableMemory .allocate (len * Double .BYTES ).asWritableBuffer ();
286- wbuf .putDoubleArray (srcArray , 0 , half );
287- wbuf .putDoubleArray (srcArray , half , half );
288- wbuf .resetPosition ();
289- wbuf .getDoubleArray (dstArray , 0 , len );
290- assertEquals (dstArray , srcArray );
225+ //get
226+ short [] dstArray = new short [len ];
227+ dstArray [0 ] = wbuf .getShort (); //get*()
228+ wbuf .getShortArray (dstArray , 1 , 2 ); //get*Array(dst[], dstOff, len)
229+ dstArray [3 ] = wbuf .getShort (); //get*()
230+ for (int i = half ; i < len ; i ++) { dstArray [i ] = wbuf .getShort (i * SB ); } //get*(add)
231+ assertEquals (srcArray , dstArray );
291232 }
292233
293234 @ Test
@@ -571,7 +512,7 @@ public void checkZeroBuffer() {
571512 public void checkDuplicateNonNative () {
572513 WritableMemory wmem = WritableMemory .allocate (64 );
573514 wmem .putShort (0 , (short ) 1 );
574- Buffer buf = wmem .asWritableBuffer ().duplicate (NON_NATIVE_BYTE_ORDER );
515+ Buffer buf = wmem .asWritableBuffer ().duplicate (NNBO );
575516 assertEquals (buf .getShort (0 ), 256 );
576517 }
577518
0 commit comments