Mercurial > hg > graal-compiler
changeset 23267:345f08efb500
fixed NativeFunctionInterfaceTest for locales other than en_US.UTF-8
author | Doug Simon <doug.simon@oracle.com> |
---|---|
date | Thu, 07 Jan 2016 13:57:36 +0100 |
parents | f78e658f5c43 |
children | 1ced4f8e6e7f |
files | graal/com.oracle.nfi.test/test/com/oracle/nfi/test/NativeFunctionInterfaceTest.java |
diffstat | 1 files changed, 41 insertions(+), 28 deletions(-) [+] |
line wrap: on
line diff
--- a/graal/com.oracle.nfi.test/test/com/oracle/nfi/test/NativeFunctionInterfaceTest.java Wed Jan 06 13:57:17 2016 -0800 +++ b/graal/com.oracle.nfi.test/test/com/oracle/nfi/test/NativeFunctionInterfaceTest.java Thu Jan 07 13:57:36 2016 +0100 @@ -92,11 +92,21 @@ } } - private static void assertCStringEquals(long cString, String s) { - for (int i = 0; i < s.length(); i++) { - assertEquals(unsafe.getByte(cString + i) & 0xFF, (byte) s.charAt(i)); + private static String readCString(long cStringAddress) { + StringBuilder sb = new StringBuilder(); + for (int i = 0;; i++) { + char c = (char) unsafe.getByte(cStringAddress + i); + if (c == 0) { + break; + } + sb.append(c); } - assertEquals(unsafe.getByte(cString + s.length()) & 0xFF, (byte) '\0'); + return sb.toString(); + } + + private static void assertCStringEquals(long cStringAddress, String expected) { + String cString = readCString(cStringAddress); + assertEquals(expected, cString); } @Test @@ -125,8 +135,7 @@ assumeTrue(nfi.isDefaultLibrarySearchSupported()); String formatString = "AB %f%f"; long formatCString = writeCString(unsafe, "AB %f%f", malloc(formatString.length() + 1)); - - String referenceString = "AB 1.0000001.000000"; + String referenceString = String.format(formatString, 1.0D, 1.0D); int bufferLength = referenceString.length() + 1; long buffer = malloc(bufferLength); @@ -158,22 +167,23 @@ @Test public void test4() { assumeTrue(nfi.isDefaultLibrarySearchSupported()); - long str = malloc(49); + StringBuilder formatStringBuf = new StringBuilder(); int[] val = new int[12]; for (int i = 0; i < 12; i++) { - unsafe.putByte(str + 2 * i, (byte) '%'); - unsafe.putByte(str + 2 * i + 1, (byte) 'i'); + formatStringBuf.append("%d"); val[i] = i; } double[] dval = new double[12]; for (int i = 12; i < 24; i++) { - unsafe.putByte(str + 2 * i, (byte) '%'); - unsafe.putByte(str + 2 * i + 1, (byte) 'f'); + formatStringBuf.append("%f"); dval[i - 12] = i + 0.5; } - unsafe.putByte(str + 48, (byte) '\0'); - String referenceString = "0123456789101112.50000013.50000014.50000015.50000016.50000017.50000018.50000019.50000020.500000" + "21.50000022.50000023.500000"; + String formatString = formatStringBuf.toString(); + long formatCString = writeCString(unsafe, formatString, malloc(formatString.length() + 1)); + + String referenceString = String.format(formatString, val[0], val[1], val[2], val[3], val[4], val[5], val[6], val[7], val[8], val[9], val[10], val[11], dval[0], dval[1], dval[2], dval[3], + dval[4], dval[5], dval[6], dval[7], dval[8], dval[9], dval[10], dval[11]); int bufferLength = referenceString.length() + 1; long buffer = malloc(bufferLength); @@ -182,8 +192,8 @@ int.class, int.class, int.class, int.class, int.class, double.class, double.class, double.class, double.class, double.class, double.class, double.class, double.class, double.class, double.class, double.class, double.class); - int result = (int) snprintf.call(buffer, bufferLength, str, val[0], val[1], val[2], val[3], val[4], val[5], val[6], val[7], val[8], val[9], val[10], val[11], dval[0], dval[1], dval[2], - dval[3], dval[4], dval[5], dval[6], dval[7], dval[8], dval[9], dval[10], dval[11]); + int result = (int) snprintf.call(buffer, bufferLength, formatCString, val[0], val[1], val[2], val[3], val[4], val[5], val[6], val[7], val[8], val[9], val[10], val[11], dval[0], dval[1], + dval[2], dval[3], dval[4], dval[5], dval[6], dval[7], dval[8], dval[9], dval[10], dval[11]); assertCStringEquals(buffer, referenceString); Assert.assertEquals(referenceString.length(), result); } @@ -191,28 +201,31 @@ @Test public void test5() { assumeTrue(nfi.isDefaultLibrarySearchSupported()); - long str = malloc(73); + + StringBuilder formatStringBuf = new StringBuilder(); + int[] val = new int[12]; for (int i = 0; i < 12; i++) { - unsafe.putByte(str + 2 * i, (byte) '%'); - unsafe.putByte(str + 2 * i + 1, (byte) 'i'); + formatStringBuf.append("%d"); val[i] = i; } double[] dval = new double[12]; for (int i = 12; i < 24; i++) { - unsafe.putByte(str + 2 * i, (byte) '%'); - unsafe.putByte(str + 2 * i + 1, (byte) 'f'); + formatStringBuf.append("%f"); dval[i - 12] = i + 0.5; } char[] cval = new char[12]; for (int i = 24; i < 36; i++) { - unsafe.putByte(str + 2 * i, (byte) '%'); - unsafe.putByte(str + 2 * i + 1, (byte) 'c'); + formatStringBuf.append("%c"); cval[i - 24] = (char) ('a' + (i - 24)); } - unsafe.putByte(str + 72, (byte) '\0'); + + String formatString = formatStringBuf.toString(); + long formatCString = writeCString(unsafe, formatString, malloc(formatString.length() + 1)); - String referenceString = "0123456789101112.50000013.50000014.50000015.50000016.50000017.50000018.50000019.50000020.50000021.50000022.50000023.500000abcdefghijkl"; + String referenceString = String.format(formatString, val[0], val[1], val[2], val[3], val[4], val[5], val[6], val[7], val[8], val[9], val[10], val[11], dval[0], dval[1], dval[2], dval[3], + dval[4], dval[5], dval[6], dval[7], dval[8], dval[9], dval[10], dval[11], cval[0], cval[1], cval[2], cval[3], cval[4], cval[5], cval[6], cval[7], cval[8], cval[9], cval[10], + cval[11]); int bufferLength = referenceString.length() + 1; long buffer = malloc(bufferLength); @@ -222,9 +235,9 @@ double.class, double.class, double.class, double.class, char.class, char.class, char.class, char.class, char.class, char.class, char.class, char.class, char.class, char.class, char.class, char.class); - int result = (int) snprintf.call(buffer, bufferLength, str, val[0], val[1], val[2], val[3], val[4], val[5], val[6], val[7], val[8], val[9], val[10], val[11], dval[0], dval[1], dval[2], - dval[3], dval[4], dval[5], dval[6], dval[7], dval[8], dval[9], dval[10], dval[11], cval[0], cval[1], cval[2], cval[3], cval[4], cval[5], cval[6], cval[7], cval[8], cval[9], - cval[10], cval[11]); + int result = (int) snprintf.call(buffer, bufferLength, formatCString, val[0], val[1], val[2], val[3], val[4], val[5], val[6], val[7], val[8], val[9], val[10], val[11], dval[0], dval[1], + dval[2], dval[3], dval[4], dval[5], dval[6], dval[7], dval[8], dval[9], dval[10], dval[11], cval[0], cval[1], cval[2], cval[3], cval[4], cval[5], cval[6], cval[7], cval[8], + cval[9], cval[10], cval[11]); assertCStringEquals(buffer, referenceString); Assert.assertEquals(referenceString.length(), result); } @@ -254,7 +267,7 @@ String formatString = "AB %f%f"; long formatCString = writeCString(unsafe, "AB %f%f", malloc(formatString.length() + 1)); - String expected = "AB 1.0000001.000000"; + String expected = String.format(formatString, 1.0D, 1.0D); int bufferLength = expected.length() + 1; byte[] buffer = new byte[bufferLength];