< prev index next >

test/jdk/java/foreign/valist/VaListTest.java

Print this page

197             MH_sumStack.invokeExact(longSum.baseAddress(), doubleSum.baseAddress(), 32,
198                 1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 10L, 11L, 12L, 13L, 14L, 15L, 16L,
199                 1D, 2D, 3D, 4D, 5D, 6D, 7D, 8D, 9D, 10D, 11D, 12D, 13D, 14D, 15D, 16D);
200 
201             long lSum = (long) VH_long.get(longSum.baseAddress());
202             double dSum = (double) VH_double.get(doubleSum.baseAddress());
203 
204             assertEquals(lSum, 136L);
205             assertEquals(dSum, 136D);
206         }
207     }
208 
209     @Test(dataProvider = "upcalls")
210     public void testUpcall(MethodHandle target, MethodHandle callback) throws Throwable {
211         FunctionDescriptor desc = FunctionDescriptor.ofVoid(C_VA_LIST);
212         try (MemorySegment stub = abi.upcallStub(callback, desc)) {
213             target.invokeExact(stub.baseAddress());
214         }
215     }
216 














217     @DataProvider
218     public static Object[][] upcalls() {
219         return new Object[][]{
220             { linkVaListCB("upcallBigStruct"), VaListConsumer.mh(vaList -> {
221                 try (MemorySegment struct = vaList.vargAsSegment(BigPoint_LAYOUT)) {
222                     assertEquals((long) VH_BigPoint_x.get(struct.baseAddress()), 8);
223                     assertEquals((long) VH_BigPoint_y.get(struct.baseAddress()), 16);
224                 }
225             })},
226             { linkVaListCB("upcallBigStruct"), VaListConsumer.mh(vaList -> {
227                 VaList copy = vaList.copy();
228                 try (MemorySegment struct = vaList.vargAsSegment(BigPoint_LAYOUT)) {
229                     assertEquals((long) VH_BigPoint_x.get(struct.baseAddress()), 8);
230                     assertEquals((long) VH_BigPoint_y.get(struct.baseAddress()), 16);
231 
232                     VH_BigPoint_x.set(struct.baseAddress(), 0);
233                     VH_BigPoint_y.set(struct.baseAddress(), 0);
234                 }
235 
236                 // should be independent

197             MH_sumStack.invokeExact(longSum.baseAddress(), doubleSum.baseAddress(), 32,
198                 1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 10L, 11L, 12L, 13L, 14L, 15L, 16L,
199                 1D, 2D, 3D, 4D, 5D, 6D, 7D, 8D, 9D, 10D, 11D, 12D, 13D, 14D, 15D, 16D);
200 
201             long lSum = (long) VH_long.get(longSum.baseAddress());
202             double dSum = (double) VH_double.get(doubleSum.baseAddress());
203 
204             assertEquals(lSum, 136L);
205             assertEquals(dSum, 136D);
206         }
207     }
208 
209     @Test(dataProvider = "upcalls")
210     public void testUpcall(MethodHandle target, MethodHandle callback) throws Throwable {
211         FunctionDescriptor desc = FunctionDescriptor.ofVoid(C_VA_LIST);
212         try (MemorySegment stub = abi.upcallStub(callback, desc)) {
213             target.invokeExact(stub.baseAddress());
214         }
215     }
216 
217     @Test(expectedExceptions = UnsupportedOperationException.class,
218           expectedExceptionsMessageRegExp = ".*Empty VaList.*")
219     public void testEmptyNotCloseable() {
220         VaList list = VaList.empty();
221         list.close();
222     }
223 
224     @Test(expectedExceptions = UnsupportedOperationException.class,
225           expectedExceptionsMessageRegExp = ".*Empty VaList.*")
226     public void testEmptyVaListFromBuilderNotCloseable() {
227         VaList list = VaList.make(b -> {});
228         list.close();
229     }
230 
231     @DataProvider
232     public static Object[][] upcalls() {
233         return new Object[][]{
234             { linkVaListCB("upcallBigStruct"), VaListConsumer.mh(vaList -> {
235                 try (MemorySegment struct = vaList.vargAsSegment(BigPoint_LAYOUT)) {
236                     assertEquals((long) VH_BigPoint_x.get(struct.baseAddress()), 8);
237                     assertEquals((long) VH_BigPoint_y.get(struct.baseAddress()), 16);
238                 }
239             })},
240             { linkVaListCB("upcallBigStruct"), VaListConsumer.mh(vaList -> {
241                 VaList copy = vaList.copy();
242                 try (MemorySegment struct = vaList.vargAsSegment(BigPoint_LAYOUT)) {
243                     assertEquals((long) VH_BigPoint_x.get(struct.baseAddress()), 8);
244                     assertEquals((long) VH_BigPoint_y.get(struct.baseAddress()), 16);
245 
246                     VH_BigPoint_x.set(struct.baseAddress(), 0);
247                     VH_BigPoint_y.set(struct.baseAddress(), 0);
248                 }
249 
250                 // should be independent
< prev index next >