Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
PojavLauncherTeam
GitHub Repository: PojavLauncherTeam/openjdk-multiarch-jdk8u
Path: blob/aarch64-shenandoah-jdk8u272-b10/jdk/test/java/nio/Buffer/BasicByte.java
38813 views
1
/*
2
* Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved.
3
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4
*
5
* This code is free software; you can redistribute it and/or modify it
6
* under the terms of the GNU General Public License version 2 only, as
7
* published by the Free Software Foundation.
8
*
9
* This code is distributed in the hope that it will be useful, but WITHOUT
10
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
12
* version 2 for more details (a copy is included in the LICENSE file that
13
* accompanied this code).
14
*
15
* You should have received a copy of the GNU General Public License version
16
* 2 along with this work; if not, write to the Free Software Foundation,
17
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18
*
19
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20
* or visit www.oracle.com if you need additional information or have any
21
* questions.
22
*/
23
24
/* Type-specific source code for unit test
25
*
26
* Regenerate the BasicX classes via genBasic.sh whenever this file changes.
27
* We check in the generated source files so that the test tree can be used
28
* independently of the rest of the source tree.
29
*/
30
31
// -- This file was mechanically generated: Do not edit! -- //
32
33
import java.nio.*;
34
import java.lang.reflect.Method;
35
36
37
public class BasicByte
38
extends Basic
39
{
40
41
private static final byte[] VALUES = {
42
Byte.MIN_VALUE,
43
(byte) -1,
44
(byte) 0,
45
(byte) 1,
46
Byte.MAX_VALUE,
47
48
49
50
51
52
53
54
55
56
57
58
59
};
60
61
private static void relGet(ByteBuffer b) {
62
int n = b.capacity();
63
byte v;
64
for (int i = 0; i < n; i++)
65
ck(b, (long)b.get(), (long)((byte)ic(i)));
66
b.rewind();
67
}
68
69
private static void relGet(ByteBuffer b, int start) {
70
int n = b.remaining();
71
byte v;
72
for (int i = start; i < n; i++)
73
ck(b, (long)b.get(), (long)((byte)ic(i)));
74
b.rewind();
75
}
76
77
private static void absGet(ByteBuffer b) {
78
int n = b.capacity();
79
byte v;
80
for (int i = 0; i < n; i++)
81
ck(b, (long)b.get(), (long)((byte)ic(i)));
82
b.rewind();
83
}
84
85
private static void bulkGet(ByteBuffer b) {
86
int n = b.capacity();
87
byte[] a = new byte[n + 7];
88
b.get(a, 7, n);
89
for (int i = 0; i < n; i++)
90
ck(b, (long)a[i + 7], (long)((byte)ic(i)));
91
}
92
93
private static void relPut(ByteBuffer b) {
94
int n = b.capacity();
95
b.clear();
96
for (int i = 0; i < n; i++)
97
b.put((byte)ic(i));
98
b.flip();
99
}
100
101
private static void absPut(ByteBuffer b) {
102
int n = b.capacity();
103
b.clear();
104
for (int i = 0; i < n; i++)
105
b.put(i, (byte)ic(i));
106
b.limit(n);
107
b.position(0);
108
}
109
110
private static void bulkPutArray(ByteBuffer b) {
111
int n = b.capacity();
112
b.clear();
113
byte[] a = new byte[n + 7];
114
for (int i = 0; i < n; i++)
115
a[i + 7] = (byte)ic(i);
116
b.put(a, 7, n);
117
b.flip();
118
}
119
120
private static void bulkPutBuffer(ByteBuffer b) {
121
int n = b.capacity();
122
b.clear();
123
ByteBuffer c = ByteBuffer.allocate(n + 7);
124
c.position(7);
125
for (int i = 0; i < n; i++)
126
c.put((byte)ic(i));
127
c.flip();
128
c.position(7);
129
b.put(c);
130
b.flip();
131
}
132
133
//6231529
134
private static void callReset(ByteBuffer b) {
135
b.position(0);
136
b.mark();
137
138
b.duplicate().reset();
139
b.asReadOnlyBuffer().reset();
140
}
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
private static void checkSlice(ByteBuffer b, ByteBuffer slice) {
183
ck(slice, 0, slice.position());
184
ck(slice, b.remaining(), slice.limit());
185
ck(slice, b.remaining(), slice.capacity());
186
if (b.isDirect() != slice.isDirect())
187
fail("Lost direction", slice);
188
if (b.isReadOnly() != slice.isReadOnly())
189
fail("Lost read-only", slice);
190
}
191
192
193
194
private static void checkBytes(ByteBuffer b, byte[] bs) {
195
int n = bs.length;
196
int p = b.position();
197
byte v;
198
if (b.order() == ByteOrder.BIG_ENDIAN) {
199
for (int i = 0; i < n; i++)
200
ck(b, b.get(), bs[i]);
201
} else {
202
for (int i = n - 1; i >= 0; i--)
203
ck(b, b.get(), bs[i]);
204
}
205
b.position(p);
206
}
207
208
private static void compact(Buffer b) {
209
try {
210
Class<?> cl = b.getClass();
211
Method m = cl.getDeclaredMethod("compact");
212
m.setAccessible(true);
213
m.invoke(b);
214
} catch (Exception e) {
215
fail(e.getMessage(), b);
216
}
217
}
218
219
private static void checkInvalidMarkException(final Buffer b) {
220
tryCatch(b, InvalidMarkException.class, new Runnable() {
221
public void run() {
222
b.mark();
223
compact(b);
224
b.reset();
225
}});
226
}
227
228
private static void testViews(int level, ByteBuffer b, boolean direct) {
229
230
ShortBuffer sb = b.asShortBuffer();
231
BasicShort.test(level, sb, direct);
232
checkBytes(b, new byte[] { 0, (byte)ic(0) });
233
checkInvalidMarkException(sb);
234
235
CharBuffer cb = b.asCharBuffer();
236
BasicChar.test(level, cb, direct);
237
checkBytes(b, new byte[] { 0, (byte)ic(0) });
238
checkInvalidMarkException(cb);
239
240
IntBuffer ib = b.asIntBuffer();
241
BasicInt.test(level, ib, direct);
242
checkBytes(b, new byte[] { 0, 0, 0, (byte)ic(0) });
243
checkInvalidMarkException(ib);
244
245
LongBuffer lb = b.asLongBuffer();
246
BasicLong.test(level, lb, direct);
247
checkBytes(b, new byte[] { 0, 0, 0, 0, 0, 0, 0, (byte)ic(0) });
248
checkInvalidMarkException(lb);
249
250
FloatBuffer fb = b.asFloatBuffer();
251
BasicFloat.test(level, fb, direct);
252
checkBytes(b, new byte[] { 0x42, (byte)0xc2, 0, 0 });
253
checkInvalidMarkException(fb);
254
255
DoubleBuffer db = b.asDoubleBuffer();
256
BasicDouble.test(level, db, direct);
257
checkBytes(b, new byte[] { 0x40, 0x58, 0x40, 0, 0, 0, 0, 0 });
258
checkInvalidMarkException(db);
259
}
260
261
private static void testHet(int level, ByteBuffer b) {
262
263
int p = b.position();
264
b.limit(b.capacity());
265
show(level, b);
266
out.print(" put:");
267
268
b.putChar((char)1);
269
b.putChar((char)Character.MAX_VALUE);
270
out.print(" char");
271
272
b.putShort((short)1);
273
b.putShort((short)Short.MAX_VALUE);
274
out.print(" short");
275
276
b.putInt(1);
277
b.putInt(Integer.MAX_VALUE);
278
out.print(" int");
279
280
b.putLong((long)1);
281
b.putLong((long)Long.MAX_VALUE);
282
out.print(" long");
283
284
b.putFloat((float)1);
285
b.putFloat((float)Float.MIN_VALUE);
286
b.putFloat((float)Float.MAX_VALUE);
287
out.print(" float");
288
289
b.putDouble((double)1);
290
b.putDouble((double)Double.MIN_VALUE);
291
b.putDouble((double)Double.MAX_VALUE);
292
out.print(" double");
293
294
out.println();
295
b.limit(b.position());
296
b.position(p);
297
show(level, b);
298
out.print(" get:");
299
300
ck(b, b.getChar(), 1);
301
ck(b, b.getChar(), Character.MAX_VALUE);
302
out.print(" char");
303
304
ck(b, b.getShort(), 1);
305
ck(b, b.getShort(), Short.MAX_VALUE);
306
out.print(" short");
307
308
ck(b, b.getInt(), 1);
309
ck(b, b.getInt(), Integer.MAX_VALUE);
310
out.print(" int");
311
312
ck(b, b.getLong(), 1);
313
ck(b, b.getLong(), Long.MAX_VALUE);
314
out.print(" long");
315
316
ck(b, (long)b.getFloat(), 1);
317
ck(b, (long)b.getFloat(), (long)Float.MIN_VALUE);
318
ck(b, (long)b.getFloat(), (long)Float.MAX_VALUE);
319
out.print(" float");
320
321
ck(b, (long)b.getDouble(), 1);
322
ck(b, (long)b.getDouble(), (long)Double.MIN_VALUE);
323
ck(b, (long)b.getDouble(), (long)Double.MAX_VALUE);
324
out.print(" double");
325
326
out.println();
327
328
}
329
330
331
332
private static void fail(String problem,
333
ByteBuffer xb, ByteBuffer yb,
334
byte x, byte y) {
335
fail(problem + String.format(": x=%s y=%s", x, y), xb, yb);
336
}
337
338
private static void tryCatch(Buffer b, Class<?> ex, Runnable thunk) {
339
boolean caught = false;
340
try {
341
thunk.run();
342
} catch (Throwable x) {
343
if (ex.isAssignableFrom(x.getClass())) {
344
caught = true;
345
} else {
346
fail(x.getMessage() + " not expected");
347
}
348
}
349
if (!caught)
350
fail(ex.getName() + " not thrown", b);
351
}
352
353
private static void tryCatch(byte [] t, Class<?> ex, Runnable thunk) {
354
tryCatch(ByteBuffer.wrap(t), ex, thunk);
355
}
356
357
public static void test(int level, final ByteBuffer b, boolean direct) {
358
359
show(level, b);
360
361
if (direct != b.isDirect())
362
fail("Wrong direction", b);
363
364
// Gets and puts
365
366
relPut(b);
367
relGet(b);
368
absGet(b);
369
bulkGet(b);
370
371
absPut(b);
372
relGet(b);
373
absGet(b);
374
bulkGet(b);
375
376
bulkPutArray(b);
377
relGet(b);
378
379
bulkPutBuffer(b);
380
relGet(b);
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
// Compact
421
422
relPut(b);
423
b.position(13);
424
b.compact();
425
b.flip();
426
relGet(b, 13);
427
428
// Exceptions
429
430
relPut(b);
431
b.limit(b.capacity() / 2);
432
b.position(b.limit());
433
434
tryCatch(b, BufferUnderflowException.class, new Runnable() {
435
public void run() {
436
b.get();
437
}});
438
439
tryCatch(b, BufferOverflowException.class, new Runnable() {
440
public void run() {
441
b.put((byte)42);
442
}});
443
444
// The index must be non-negative and lesss than the buffer's limit.
445
tryCatch(b, IndexOutOfBoundsException.class, new Runnable() {
446
public void run() {
447
b.get(b.limit());
448
}});
449
tryCatch(b, IndexOutOfBoundsException.class, new Runnable() {
450
public void run() {
451
b.get(-1);
452
}});
453
454
tryCatch(b, IndexOutOfBoundsException.class, new Runnable() {
455
public void run() {
456
b.put(b.limit(), (byte)42);
457
}});
458
459
tryCatch(b, InvalidMarkException.class, new Runnable() {
460
public void run() {
461
b.position(0);
462
b.mark();
463
b.compact();
464
b.reset();
465
}});
466
467
// Values
468
469
b.clear();
470
b.put((byte)0);
471
b.put((byte)-1);
472
b.put((byte)1);
473
b.put(Byte.MAX_VALUE);
474
b.put(Byte.MIN_VALUE);
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
byte v;
493
b.flip();
494
ck(b, b.get(), 0);
495
ck(b, b.get(), (byte)-1);
496
ck(b, b.get(), 1);
497
ck(b, b.get(), Byte.MAX_VALUE);
498
ck(b, b.get(), Byte.MIN_VALUE);
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
// Comparison
522
b.rewind();
523
ByteBuffer b2 = ByteBuffer.allocate(b.capacity());
524
b2.put(b);
525
b2.flip();
526
b.position(2);
527
b2.position(2);
528
if (!b.equals(b2)) {
529
for (int i = 2; i < b.limit(); i++) {
530
byte x = b.get(i);
531
byte y = b2.get(i);
532
if (x != y
533
534
535
536
537
538
539
)
540
out.println("[" + i + "] " + x + " != " + y);
541
}
542
fail("Identical buffers not equal", b, b2);
543
}
544
if (b.compareTo(b2) != 0)
545
fail("Comparison to identical buffer != 0", b, b2);
546
547
b.limit(b.limit() + 1);
548
b.position(b.limit() - 1);
549
b.put((byte)99);
550
b.rewind();
551
b2.rewind();
552
if (b.equals(b2))
553
fail("Non-identical buffers equal", b, b2);
554
if (b.compareTo(b2) <= 0)
555
fail("Comparison to shorter buffer <= 0", b, b2);
556
b.limit(b.limit() - 1);
557
558
b.put(2, (byte)42);
559
if (b.equals(b2))
560
fail("Non-identical buffers equal", b, b2);
561
if (b.compareTo(b2) <= 0)
562
fail("Comparison to lesser buffer <= 0", b, b2);
563
564
// Check equals and compareTo with interesting values
565
for (byte x : VALUES) {
566
ByteBuffer xb = ByteBuffer.wrap(new byte[] { x });
567
if (xb.compareTo(xb) != 0) {
568
fail("compareTo not reflexive", xb, xb, x, x);
569
}
570
if (! xb.equals(xb)) {
571
fail("equals not reflexive", xb, xb, x, x);
572
}
573
for (byte y : VALUES) {
574
ByteBuffer yb = ByteBuffer.wrap(new byte[] { y });
575
if (xb.compareTo(yb) != - yb.compareTo(xb)) {
576
fail("compareTo not anti-symmetric",
577
xb, yb, x, y);
578
}
579
if ((xb.compareTo(yb) == 0) != xb.equals(yb)) {
580
fail("compareTo inconsistent with equals",
581
xb, yb, x, y);
582
}
583
if (xb.compareTo(yb) != Byte.compare(x, y)) {
584
585
586
587
588
589
590
fail("Incorrect results for ByteBuffer.compareTo",
591
xb, yb, x, y);
592
}
593
if (xb.equals(yb) != ((x == y) || ((x != x) && (y != y)))) {
594
fail("Incorrect results for ByteBuffer.equals",
595
xb, yb, x, y);
596
}
597
}
598
}
599
600
// Sub, dup
601
602
relPut(b);
603
relGet(b.duplicate());
604
b.position(13);
605
relGet(b.duplicate(), 13);
606
relGet(b.duplicate().slice(), 13);
607
relGet(b.slice(), 13);
608
relGet(b.slice().duplicate(), 13);
609
610
// Slice
611
612
b.position(5);
613
ByteBuffer sb = b.slice();
614
checkSlice(b, sb);
615
b.position(0);
616
ByteBuffer sb2 = sb.slice();
617
checkSlice(sb, sb2);
618
619
if (!sb.equals(sb2))
620
fail("Sliced slices do not match", sb, sb2);
621
if ((sb.hasArray()) && (sb.arrayOffset() != sb2.arrayOffset()))
622
fail("Array offsets do not match: "
623
+ sb.arrayOffset() + " != " + sb2.arrayOffset(), sb, sb2);
624
625
626
627
// Views
628
629
b.clear();
630
b.order(ByteOrder.BIG_ENDIAN);
631
testViews(level + 1, b, direct);
632
633
for (int i = 1; i <= 9; i++) {
634
b.position(i);
635
show(level + 1, b);
636
testViews(level + 2, b, direct);
637
}
638
639
b.position(0);
640
b.order(ByteOrder.LITTLE_ENDIAN);
641
testViews(level + 1, b, direct);
642
643
// Heterogeneous accessors
644
645
b.order(ByteOrder.BIG_ENDIAN);
646
for (int i = 0; i <= 9; i++) {
647
b.position(i);
648
testHet(level + 1, b);
649
}
650
b.order(ByteOrder.LITTLE_ENDIAN);
651
b.position(3);
652
testHet(level + 1, b);
653
654
655
656
// Read-only views
657
658
b.rewind();
659
final ByteBuffer rb = b.asReadOnlyBuffer();
660
if (!b.equals(rb))
661
fail("Buffer not equal to read-only view", b, rb);
662
show(level + 1, rb);
663
664
tryCatch(b, ReadOnlyBufferException.class, new Runnable() {
665
public void run() {
666
relPut(rb);
667
}});
668
669
tryCatch(b, ReadOnlyBufferException.class, new Runnable() {
670
public void run() {
671
absPut(rb);
672
}});
673
674
tryCatch(b, ReadOnlyBufferException.class, new Runnable() {
675
public void run() {
676
bulkPutArray(rb);
677
}});
678
679
tryCatch(b, ReadOnlyBufferException.class, new Runnable() {
680
public void run() {
681
bulkPutBuffer(rb);
682
}});
683
684
// put(ByteBuffer) should not change source position
685
final ByteBuffer src = ByteBuffer.allocate(1);
686
tryCatch(b, ReadOnlyBufferException.class, new Runnable() {
687
public void run() {
688
rb.put(src);
689
}});
690
ck(src, src.position(), 0);
691
692
tryCatch(b, ReadOnlyBufferException.class, new Runnable() {
693
public void run() {
694
rb.compact();
695
}});
696
697
698
699
tryCatch(b, ReadOnlyBufferException.class, new Runnable() {
700
public void run() {
701
rb.putChar((char)1);
702
}});
703
tryCatch(b, ReadOnlyBufferException.class, new Runnable() {
704
public void run() {
705
rb.putChar(0, (char)1);
706
}});
707
708
tryCatch(b, ReadOnlyBufferException.class, new Runnable() {
709
public void run() {
710
rb.putShort((short)1);
711
}});
712
tryCatch(b, ReadOnlyBufferException.class, new Runnable() {
713
public void run() {
714
rb.putShort(0, (short)1);
715
}});
716
717
tryCatch(b, ReadOnlyBufferException.class, new Runnable() {
718
public void run() {
719
rb.putInt(1);
720
}});
721
tryCatch(b, ReadOnlyBufferException.class, new Runnable() {
722
public void run() {
723
rb.putInt(0, 1);
724
}});
725
726
tryCatch(b, ReadOnlyBufferException.class, new Runnable() {
727
public void run() {
728
rb.putLong((long)1);
729
}});
730
tryCatch(b, ReadOnlyBufferException.class, new Runnable() {
731
public void run() {
732
rb.putLong(0, (long)1);
733
}});
734
735
tryCatch(b, ReadOnlyBufferException.class, new Runnable() {
736
public void run() {
737
rb.putFloat((float)1);
738
}});
739
tryCatch(b, ReadOnlyBufferException.class, new Runnable() {
740
public void run() {
741
rb.putFloat(0, (float)1);
742
}});
743
744
tryCatch(b, ReadOnlyBufferException.class, new Runnable() {
745
public void run() {
746
rb.putDouble((double)1);
747
}});
748
tryCatch(b, ReadOnlyBufferException.class, new Runnable() {
749
public void run() {
750
rb.putDouble(0, (double)1);
751
}});
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
if (rb.getClass().getName().startsWith("java.nio.Heap")) {
772
773
tryCatch(b, ReadOnlyBufferException.class, new Runnable() {
774
public void run() {
775
rb.array();
776
}});
777
778
tryCatch(b, ReadOnlyBufferException.class, new Runnable() {
779
public void run() {
780
rb.arrayOffset();
781
}});
782
783
if (rb.hasArray())
784
fail("Read-only heap buffer's backing array is accessible",
785
rb);
786
787
}
788
789
// Bulk puts from read-only buffers
790
791
b.clear();
792
rb.rewind();
793
b.put(rb);
794
795
796
// For byte buffers, test both the direct and non-direct cases
797
ByteBuffer ob
798
= (b.isDirect()
799
? ByteBuffer.allocate(rb.capacity())
800
: ByteBuffer.allocateDirect(rb.capacity()));
801
rb.rewind();
802
ob.put(rb);
803
804
805
relPut(b); // Required by testViews
806
807
}
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
public static void test(final byte [] ba) {
894
int offset = 47;
895
int length = 900;
896
final ByteBuffer b = ByteBuffer.wrap(ba, offset, length);
897
show(0, b);
898
ck(b, b.capacity(), ba.length);
899
ck(b, b.position(), offset);
900
ck(b, b.limit(), offset + length);
901
902
// The offset must be non-negative and no larger than <array.length>.
903
tryCatch(ba, IndexOutOfBoundsException.class, new Runnable() {
904
public void run() {
905
ByteBuffer.wrap(ba, -1, ba.length);
906
}});
907
tryCatch(ba, IndexOutOfBoundsException.class, new Runnable() {
908
public void run() {
909
ByteBuffer.wrap(ba, ba.length + 1, ba.length);
910
}});
911
tryCatch(ba, IndexOutOfBoundsException.class, new Runnable() {
912
public void run() {
913
ByteBuffer.wrap(ba, 0, -1);
914
}});
915
tryCatch(ba, IndexOutOfBoundsException.class, new Runnable() {
916
public void run() {
917
ByteBuffer.wrap(ba, 0, ba.length + 1);
918
}});
919
920
// A NullPointerException will be thrown if the array is null.
921
tryCatch(ba, NullPointerException.class, new Runnable() {
922
public void run() {
923
ByteBuffer.wrap((byte []) null, 0, 5);
924
}});
925
tryCatch(ba, NullPointerException.class, new Runnable() {
926
public void run() {
927
ByteBuffer.wrap((byte []) null);
928
}});
929
}
930
931
private static void testAllocate() {
932
// An IllegalArgumentException will be thrown for negative capacities.
933
tryCatch((Buffer) null, IllegalArgumentException.class, new Runnable() {
934
public void run() {
935
ByteBuffer.allocate(-1);
936
}});
937
938
tryCatch((Buffer) null, IllegalArgumentException.class, new Runnable() {
939
public void run() {
940
ByteBuffer.allocateDirect(-1);
941
}});
942
943
}
944
945
public static void test() {
946
testAllocate();
947
test(0, ByteBuffer.allocate(7 * 1024), false);
948
test(0, ByteBuffer.wrap(new byte[7 * 1024], 0, 7 * 1024), false);
949
test(new byte[1024]);
950
951
ByteBuffer b = ByteBuffer.allocateDirect(7 * 1024);
952
for (b.position(0); b.position() < b.limit(); )
953
ck(b, b.get(), 0);
954
test(0, b, true);
955
956
957
958
959
960
callReset(ByteBuffer.allocate(10));
961
962
963
964
965
966
}
967
968
}
969
970