22
22
*
23
23
*/
24
24
25
- import java .io .IOException ;
26
- import java .io .RandomAccessFile ;
27
25
import java .lang .foreign .Arena ;
28
26
import java .lang .foreign .FunctionDescriptor ;
29
27
import java .lang .foreign .Linker ;
33
31
import java .lang .foreign .ValueLayout ;
34
32
import java .lang .invoke .MethodHandle ;
35
33
import java .lang .reflect .Field ;
36
- import java .nio .channels .FileChannel ;
37
34
import java .nio .charset .Charset ;
38
35
import java .nio .charset .StandardCharsets ;
39
- import java .nio .file .Files ;
40
- import java .nio .file .Path ;
41
- import java .nio .file .Paths ;
36
+ import java .util .ArrayList ;
42
37
import java .util .Arrays ;
43
38
import java .util .List ;
44
39
import java .util .Random ;
45
- import java .util .function .Consumer ;
46
40
import java .util .function .UnaryOperator ;
47
41
48
42
import jdk .internal .foreign .StringSupport ;
@@ -333,6 +327,27 @@ public void strlen_int() {
333
327
}
334
328
}
335
329
330
+ @ Test (dataProvider = "charsetsAndSegments" )
331
+ public void testStringGetWithCharset (Charset charset , MemorySegment segment ) {
332
+ for (int offset = 0 ; offset < Long .BYTES ; offset ++) {
333
+ segment .getString (offset , charset );
334
+ }
335
+ }
336
+
337
+ @ Test (dataProvider = "charsetsAndSegments" )
338
+ public void testStringSetWithCharset (Charset charset , MemorySegment segment ) {
339
+ for (int offset = 0 ; offset < Long .BYTES ; offset ++) {
340
+ segment .setString (offset , "H" , charset );
341
+ }
342
+ }
343
+
344
+ @ Test (dataProvider = "charsetsAndSegments" )
345
+ public void testStringAllocateFromWithCharset (Charset charset , MemorySegment segment ) {
346
+ for (int offset = 0 ; offset < Long .BYTES ; offset ++) {
347
+ SegmentAllocator .prefixAllocator (segment .asSlice (offset )).allocateFrom ("H" , charset );
348
+ }
349
+ }
350
+
336
351
@ DataProvider
337
352
public static Object [][] strings () {
338
353
return new Object [][]{
@@ -361,7 +376,7 @@ public static boolean containsOnlyRegularCharacters(String s) {
361
376
.allMatch (c -> Character .isLetterOrDigit ((char ) c ));
362
377
}
363
378
364
- boolean isStandard (Charset charset ) {
379
+ static boolean isStandard (Charset charset ) {
365
380
for (Field standardCharset : StandardCharsets .class .getDeclaredFields ()) {
366
381
try {
367
382
if (standardCharset .get (null ) == charset ) {
@@ -374,9 +389,9 @@ boolean isStandard(Charset charset) {
374
389
return false ;
375
390
}
376
391
377
- List <Charset > standardCharsets () {
392
+ static List <Charset > standardCharsets () {
378
393
return Charset .availableCharsets ().values ().stream ()
379
- .filter (this ::isStandard )
394
+ .filter (TestStringEncoding ::isStandard )
380
395
.toList ();
381
396
}
382
397
@@ -456,4 +471,26 @@ public String toString() {
456
471
}
457
472
}
458
473
474
+ static MemorySegment [] heapSegments () {
475
+ return new MemorySegment []{
476
+ MemorySegment .ofArray (new byte [80 ]),
477
+ MemorySegment .ofArray (new char [40 ]),
478
+ MemorySegment .ofArray (new short [40 ]),
479
+ MemorySegment .ofArray (new int [20 ]),
480
+ MemorySegment .ofArray (new float [20 ]),
481
+ MemorySegment .ofArray (new long [10 ]),
482
+ MemorySegment .ofArray (new double [10 ])
483
+ };
484
+ }
485
+
486
+ @ DataProvider
487
+ public static Object [][] charsetsAndSegments () {
488
+ List <Object []> values = new ArrayList <>();
489
+ for (Charset charset : standardCharsets ()) {
490
+ for (MemorySegment heapSegment : heapSegments ()) {
491
+ values .add (new Object [] { charset , heapSegment });
492
+ }
493
+ }
494
+ return values .toArray (Object [][]::new );
495
+ }
459
496
}
0 commit comments