< prev index next >

test/jdk/sun/nio/cs/FindEncoderBugs.java

Print this page
rev 52936 : 8215202: AArch64: jtreg test test/jdk/sun/nio/cs/FindEncoderBugs.java fails
Reviewed-by: duke
Contributed-by: nick.gasson@arm.com

@@ -1,7 +1,7 @@
 /*
- * Copyright (c) 2008, 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2008, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
  * under the terms of the GNU General Public License version 2 only, as
  * published by the Free Software Foundation.

@@ -178,11 +178,11 @@
         // private static final long maxCharsetFailures = Long.MAX_VALUE;
         private static final long maxCharsetFailures = 10000L;
         private final long failed0 = failed;
 
         // legend: r=regular d=direct In=Input Ou=Output
-        static final int maxBufSize = 20;
+        static final int maxBufSize = 40;
         static final CharBuffer[] rInBuffers = new CharBuffer[maxBufSize];
         static final CharBuffer[] dInBuffers = new CharBuffer[maxBufSize];
 
         static final ByteBuffer[] rOuBuffers = new ByteBuffer[maxBufSize];
         static final ByteBuffer[] dOuBuffers = new ByteBuffer[maxBufSize];

@@ -442,10 +442,32 @@
                     ia[len + j] = randomChar();
                 test(ia);
             }
         }
 
+        void testISO88591InvalidChar() {
+            // Several architectures implement the ISO-8859-1 encoder as an
+            // intrinsic where the vectorised assembly has separate cases
+            // for different input sizes, so exhaustively test all sizes
+            // from 0 to maxBufSize to ensure we get coverage
+
+            for (int i = 0; i < CharsetTester.maxBufSize; i++) {
+                char[] ia = new char[i];
+                for (int j = 0; j < i; j++)
+                    ia[j] = randomChar();
+
+                test(ia);
+
+                // Test break on unrepresentable character
+                for (int j = 0; j < i; j++) {
+                    char[] iaInvalid = ia.clone();
+                    iaInvalid[j] = (char)(randomChar() | 0x100);
+                    test(iaInvalid);
+                }
+            }
+        }
+
         void testPrefix(char[] prefix) {
             if (prefix.length > 0)
                 System.out.printf("Testing prefix %s%n", string(prefix));
 
             test(prefix);

@@ -490,10 +512,13 @@
 
         if (csn.equals("x-ISCII91")) {
             System.out.println("More ISCII testing...");
             new CharsetTester(cs).testPrefix(new char[]{'\u094d'}); // Halant
             new CharsetTester(cs).testPrefix(new char[]{'\u093c'}); // Nukta
+        } else if (csn.equals("ISO-8859-1")) {
+            System.out.println("More ISO-8859-1 testing...");
+            new CharsetTester(cs).testISO88591InvalidChar();
         }
     }
 
     private static void realMain(String[] args) {
         for (Charset cs : sort(Charset.availableCharsets().values())) {
< prev index next >