| /* |
| * Licensed to the Apache Software Foundation (ASF) under one or more |
| * contributor license agreements. See the NOTICE file distributed with |
| * this work for additional information regarding copyright ownership. |
| * The ASF licenses this file to You under the Apache License, Version 2.0 |
| * (the "License"); you may not use this file except in compliance with |
| * the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| package org.apache.harmony.luni.platform; |
| |
| import dalvik.annotation.TestLevel; |
| import dalvik.annotation.TestTargetNew; |
| import dalvik.annotation.TestTargetClass; |
| import dalvik.annotation.AndroidOnly; |
| |
| import junit.framework.TestCase; |
| |
| /** |
| * Tests org.apache.harmony.luni.platform.OSMemory (via IMemorySystem). |
| */ |
| @TestTargetClass(org.apache.harmony.luni.platform.OSMemory.class) |
| public class OSMemoryTest extends TestCase { |
| @TestTargetNew( |
| level = TestLevel.PARTIAL_COMPLETE, |
| notes = "", |
| method = "memset", |
| args = {} |
| ) |
| public void testMemset() { |
| IMemorySystem memory = Platform.getMemorySystem(); |
| |
| int byteCount = 32; |
| int ptr = memory.malloc(byteCount); |
| try { |
| // Ensure our newly-allocated block isn't zeroed. |
| memory.setByte(ptr, (byte) 1); |
| assertEquals((byte) 1, memory.getByte(ptr)); |
| // Check that we can clear memory. |
| memory.memset(ptr, (byte) 0, byteCount); |
| assertBytesEqual((byte) 0, ptr, byteCount); |
| // Check that we can set an arbitrary value. |
| memory.memset(ptr, (byte) 1, byteCount); |
| assertBytesEqual((byte) 1, ptr, byteCount); |
| } finally { |
| memory.free(ptr); |
| } |
| } |
| |
| void assertBytesEqual(byte value, int ptr, int byteCount) { |
| IMemorySystem memory = Platform.getMemorySystem(); |
| for (int i = 0; i < byteCount; ++i) { |
| assertEquals(value, memory.getByte(ptr + i)); |
| } |
| } |
| |
| @TestTargetNew( |
| level = TestLevel.PARTIAL_COMPLETE, |
| notes = "", |
| method = "setIntArray", |
| args = {} |
| ) |
| public void testSetIntArray() { |
| IMemorySystem memory = Platform.getMemorySystem(); |
| |
| int[] values = { 3, 7, 31, 127, 8191, 131071, 524287, 2147483647 }; |
| int[] swappedValues = new int[values.length]; |
| for (int i = 0; i < values.length; ++i) { |
| swappedValues[i] = swapInt(values[i]); |
| } |
| |
| int scale = ICommonDataTypes.SIZEOF_JINT; |
| int ptr = memory.malloc(scale * values.length); |
| try { |
| // Regular copy. Memset first so we start from a known state. |
| memory.memset(ptr, (byte) 0, scale * values.length); |
| memory.setIntArray(ptr, values, 0, values.length, false); |
| assertIntsEqual(values, ptr); |
| |
| // Swapped copy. |
| memory.memset(ptr, (byte) 0, scale * values.length); |
| memory.setIntArray(ptr, values, 0, values.length, true); |
| assertIntsEqual(swappedValues, ptr); |
| |
| // Swapped copies of slices (to ensure we test non-zero offsets). |
| memory.memset(ptr, (byte) 0, scale * values.length); |
| for (int i = 0; i < values.length; ++i) { |
| memory.setIntArray(ptr + i * scale, values, i, 1, true); |
| } |
| assertIntsEqual(swappedValues, ptr); |
| } finally { |
| memory.free(ptr); |
| } |
| } |
| |
| private void assertIntsEqual(int[] expectedValues, int ptr) { |
| IMemorySystem memory = Platform.getMemorySystem(); |
| for (int i = 0; i < expectedValues.length; ++i) { |
| assertEquals(expectedValues[i], memory.getInt(ptr + ICommonDataTypes.SIZEOF_JINT * i)); |
| } |
| } |
| |
| private static int swapInt(int n) { |
| return (((n >> 0) & 0xff) << 24) | |
| (((n >> 8) & 0xff) << 16) | |
| (((n >> 16) & 0xff) << 8) | |
| (((n >> 24) & 0xff) << 0); |
| } |
| |
| @TestTargetNew( |
| level = TestLevel.PARTIAL_COMPLETE, |
| notes = "", |
| method = "setShortArray", |
| args = {} |
| ) |
| public void testSetShortArray() { |
| IMemorySystem memory = Platform.getMemorySystem(); |
| |
| short[] values = { 0x0001, 0x0020, 0x0300, 0x4000 }; |
| short[] swappedValues = { 0x0100, 0x2000, 0x0003, 0x0040 }; |
| |
| int scale = ICommonDataTypes.SIZEOF_JSHORT; |
| int ptr = memory.malloc(scale * values.length); |
| try { |
| // Regular copy. Memset first so we start from a known state. |
| memory.memset(ptr, (byte) 0, scale * values.length); |
| memory.setShortArray(ptr, values, 0, values.length, false); |
| assertShortsEqual(values, ptr); |
| |
| // Swapped copy. |
| memory.memset(ptr, (byte) 0, scale * values.length); |
| memory.setShortArray(ptr, values, 0, values.length, true); |
| assertShortsEqual(swappedValues, ptr); |
| |
| // Swapped copies of slices (to ensure we test non-zero offsets). |
| memory.memset(ptr, (byte) 0, scale * values.length); |
| for (int i = 0; i < values.length; ++i) { |
| memory.setShortArray(ptr + i * scale, values, i, 1, true); |
| } |
| assertShortsEqual(swappedValues, ptr); |
| } finally { |
| memory.free(ptr); |
| } |
| } |
| |
| private void assertShortsEqual(short[] expectedValues, int ptr) { |
| IMemorySystem memory = Platform.getMemorySystem(); |
| for (int i = 0; i < expectedValues.length; ++i) { |
| assertEquals(expectedValues[i], memory.getShort(ptr + ICommonDataTypes.SIZEOF_JSHORT * i)); |
| } |
| } |
| |
| private static short swapShort(short n) { |
| return (short) ((((n >> 0) & 0xff) << 8) | (((n >> 8) & 0xff) << 0)); |
| } |
| } |