summaryrefslogtreecommitdiffstats
path: root/harmony-tests
diff options
context:
space:
mode:
authorNarayan Kamath <narayan@google.com>2015-06-22 17:20:04 +0100
committerNarayan Kamath <narayan@google.com>2015-06-22 17:41:42 +0100
commit9006e31bc25f3f3282d6d39f09e5dda5bd1be1ce (patch)
treef832caac57f8955c543677f9c2852c22e1167913 /harmony-tests
parent00d8b573b37f723cd58ba7b6cc220e22f1720d45 (diff)
downloadlibcore-9006e31bc25f3f3282d6d39f09e5dda5bd1be1ce.zip
libcore-9006e31bc25f3f3282d6d39f09e5dda5bd1be1ce.tar.gz
libcore-9006e31bc25f3f3282d6d39f09e5dda5bd1be1ce.tar.bz2
Add CTS test for unaligned reads / writes with swaps.
bug: 21491780 (cherry picked from commit 11b2b3f7d8ef8538bdda11db197eb68aa662678e) Change-Id: I22a7307694dbd554566d8992e187f504665d5506
Diffstat (limited to 'harmony-tests')
-rw-r--r--harmony-tests/src/test/java/org/apache/harmony/tests/java/nio/DirectByteBufferTest.java57
1 files changed, 57 insertions, 0 deletions
diff --git a/harmony-tests/src/test/java/org/apache/harmony/tests/java/nio/DirectByteBufferTest.java b/harmony-tests/src/test/java/org/apache/harmony/tests/java/nio/DirectByteBufferTest.java
index ffdfb2c..892cd1d 100644
--- a/harmony-tests/src/test/java/org/apache/harmony/tests/java/nio/DirectByteBufferTest.java
+++ b/harmony-tests/src/test/java/org/apache/harmony/tests/java/nio/DirectByteBufferTest.java
@@ -16,6 +16,10 @@
package org.apache.harmony.tests.java.nio;
import java.nio.ByteBuffer;
+import java.nio.ByteOrder;
+import java.nio.IntBuffer;
+import java.nio.LongBuffer;
+import java.nio.ShortBuffer;
public class DirectByteBufferTest extends ByteBufferTest {
@@ -57,4 +61,57 @@ public class DirectByteBufferTest extends ByteBufferTest {
public void testIsReadOnly() {
assertFalse(buf.isReadOnly());
}
+
+ // http://b/19692084
+ // http://b/21491780
+ public void testUnalignedReadsAndWrites() {
+ // We guarantee that the first byte of the buffer is 8 byte aligned.
+ ByteBuffer buf = ByteBuffer.allocateDirect(23);
+ // Native order is always little endian, so this forces swaps.
+ buf.order(ByteOrder.BIG_ENDIAN);
+
+ for (int i = 0; i < 8; ++i) {
+ buf.position(i);
+
+ // 2 byte swaps.
+ ShortBuffer shortBuf = buf.asShortBuffer();
+ short[] shortArray = new short[] { 42, 24 };
+
+ // Write.
+ shortBuf.put(shortArray);
+ // Read
+ shortBuf.flip();
+ shortBuf.get(shortArray);
+ // Assert Equality
+ assertEquals(42, shortArray[0]);
+ assertEquals(24, shortArray[1]);
+
+ buf.position(i);
+ // 4 byte swaps.
+ IntBuffer intBuf = buf.asIntBuffer();
+ int[] intArray = new int[] { 967, 1983 };
+ // Write.
+ intBuf.put(intArray);
+ // Read
+ intBuf.flip();
+ intBuf.get(intArray);
+ // Assert Equality
+ assertEquals(967, intArray[0]);
+ assertEquals(1983, intArray[1]);
+
+
+ buf.position(i);
+ // 8 byte swaps.
+ LongBuffer longBuf = buf.asLongBuffer();
+ long[] longArray = new long[] { 2147484614L, 2147485823L };
+ // Write.
+ longBuf.put(longArray);
+ // Read
+ longBuf.flip();
+ longBuf.get(longArray);
+ // Assert Equality
+ assertEquals(2147484614L, longArray[0]);
+ assertEquals(2147485823L, longArray[1]);
+ }
+ }
}