diff options
author | Elliott Hughes <enh@google.com> | 2012-01-31 19:18:51 -0800 |
---|---|---|
committer | Elliott Hughes <enh@google.com> | 2012-01-31 19:20:20 -0800 |
commit | 741b5b7ef4c7fd4a786364bbf60d515489caff47 (patch) | |
tree | e5d5f9ee5c1fb1c177c453985eeb1242e3d73bf7 /test/070-nio-buffer | |
parent | 09cc2d39b3073ab0c613a9f660983e781693d958 (diff) | |
download | art-741b5b7ef4c7fd4a786364bbf60d515489caff47.tar.gz art-741b5b7ef4c7fd4a786364bbf60d515489caff47.tar.bz2 art-741b5b7ef4c7fd4a786364bbf60d515489caff47.zip |
Manually merge my AOSP update to the VM tests.
Original change: https://android-review.googlesource.com/32051
Bug: http://code.google.com/p/android/issues/detail?id=21599
Bug: http://code.google.com/p/android/issues/detail?id=21597
Change-Id: I31e440b66b720647afab54ca39fd6eb1bbb0cb60
Diffstat (limited to 'test/070-nio-buffer')
-rw-r--r-- | test/070-nio-buffer/expected.txt | 3 | ||||
-rw-r--r-- | test/070-nio-buffer/src/Main.java | 84 |
2 files changed, 85 insertions, 2 deletions
diff --git a/test/070-nio-buffer/expected.txt b/test/070-nio-buffer/expected.txt index e2710014c5..ddb45af6b5 100644 --- a/test/070-nio-buffer/expected.txt +++ b/test/070-nio-buffer/expected.txt @@ -1,3 +1,6 @@ +Direct byte buffer has array: true Got expected buffer overflow exception Got expected out-of-bounds exception Got expected buffer overflow exception +00fbfb2ec03000001234567840490fd01122334455667788000000000000000100000000 +ccfb2efb30c0cccc78563412d00f494088776655443322110100000000000000cccccccc diff --git a/test/070-nio-buffer/src/Main.java b/test/070-nio-buffer/src/Main.java index bfcab3afb3..a7433b8516 100644 --- a/test/070-nio-buffer/src/Main.java +++ b/test/070-nio-buffer/src/Main.java @@ -17,14 +17,21 @@ import java.nio.BufferOverflowException; import java.nio.ByteBuffer; import java.nio.ByteOrder; +import java.nio.CharBuffer; +import java.nio.DoubleBuffer; import java.nio.FloatBuffer; import java.nio.IntBuffer; +import java.nio.LongBuffer; import java.nio.ShortBuffer; public class Main { public static void main(String[] args) { - intFloatTest(); - basicShortTest(); + ByteBuffer buf = ByteBuffer.allocateDirect(16); + System.out.println("Direct byte buffer has array: " + buf.hasArray()); + + intFloatTest(); + basicShortTest(); + primTest(); } /* @@ -94,4 +101,77 @@ public class Main { int1.put (data); int1.position (0); } + + /* + * Exercise all "view buffer" classes, in both byte orders. + */ + public static void primTest() { + ByteBuffer directBuf = ByteBuffer.allocateDirect(36); + directBuf.order(ByteOrder.BIG_ENDIAN); + storeValues(directBuf); + + for (int i = 0; i < 36; i++) { + directBuf.put(i, (byte) 0xcc); + } + + directBuf.order(ByteOrder.LITTLE_ENDIAN); + storeValues(directBuf); + } + + static void storeValues(ByteBuffer directBuf) { + directBuf.position(0); + ShortBuffer shortBuf = directBuf.asShortBuffer(); + CharBuffer charBuf = directBuf.asCharBuffer(); + IntBuffer intBuf = directBuf.asIntBuffer(); + FloatBuffer floatBuf = directBuf.asFloatBuffer(); + LongBuffer longBuf = directBuf.asLongBuffer(); + DoubleBuffer doubleBuf = directBuf.asDoubleBuffer(); + + final byte byteValue = -5; + final short shortValue = -1234; + final char charValue = 49200; + final int intValue = 0x12345678; + final float floatValue = 3.14159f; + final long longValue = 0x1122334455667788L; + final double doubleValue = Double.MIN_VALUE; + + if (directBuf.put(1, byteValue).get(1) != byteValue) { + throw new RuntimeException("byte get/store failed"); + } + if (shortBuf.put(1, shortValue).get(1) != shortValue) { + throw new RuntimeException("short get/store failed"); + } + if (charBuf.put(2, charValue).get(2) != charValue) { + throw new RuntimeException("char get/store failed"); + } + if (intBuf.put(2, intValue).get(2) != intValue) { + throw new RuntimeException("int get/store failed"); + } + if (floatBuf.put(3, floatValue).get(3) != floatValue) { + throw new RuntimeException("float get/store failed"); + } + if (longBuf.put(2, longValue).get(2) != longValue) { + throw new RuntimeException("long get/store failed"); + } + if (doubleBuf.put(3, doubleValue).get(3) != doubleValue) { + throw new RuntimeException("double get/store failed"); + } + + directBuf.position(0); + char[] outBuf = new char[directBuf.limit() * 2]; + for (int i = 0; i < directBuf.limit(); i++) { + byte b = directBuf.get(); + outBuf[i*2] = hexChar((byte) ((b >> 4) & 0x0f)); + outBuf[i*2+1] = hexChar((byte) (b & 0x0f)); + } + System.out.println(new String(outBuf)); + } + + static char hexChar(byte b) { + if (b < 10) { + return (char) ('0' + b); + } else { + return (char) ('a' + b - 10); + } + } } |