test/jdk/java/nio/Buffer/BasicDouble.java
changeset 47216 71c04702a3d5
parent 37913 3cc95b690353
child 53855 7c362992527a
equal deleted inserted replaced
47215:4ebc2e2fb97c 47216:71c04702a3d5
       
     1 /*
       
     2  * Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.
       
     3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
       
     4  *
       
     5  * This code is free software; you can redistribute it and/or modify it
       
     6  * under the terms of the GNU General Public License version 2 only, as
       
     7  * published by the Free Software Foundation.
       
     8  *
       
     9  * This code is distributed in the hope that it will be useful, but WITHOUT
       
    10  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
       
    11  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
       
    12  * version 2 for more details (a copy is included in the LICENSE file that
       
    13  * accompanied this code).
       
    14  *
       
    15  * You should have received a copy of the GNU General Public License version
       
    16  * 2 along with this work; if not, write to the Free Software Foundation,
       
    17  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
       
    18  *
       
    19  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
       
    20  * or visit www.oracle.com if you need additional information or have any
       
    21  * questions.
       
    22  */
       
    23 
       
    24 /* Type-specific source code for unit test
       
    25  *
       
    26  * Regenerate the BasicX classes via genBasic.sh whenever this file changes.
       
    27  * We check in the generated source files so that the test tree can be used
       
    28  * independently of the rest of the source tree.
       
    29  */
       
    30 
       
    31 // -- This file was mechanically generated: Do not edit! -- //
       
    32 
       
    33 import java.nio.*;
       
    34 
       
    35 
       
    36 public class BasicDouble
       
    37     extends Basic
       
    38 {
       
    39 
       
    40     private static final double[] VALUES = {
       
    41         Double.MIN_VALUE,
       
    42         (double) -1,
       
    43         (double) 0,
       
    44         (double) 1,
       
    45         Double.MAX_VALUE,
       
    46 
       
    47 
       
    48 
       
    49 
       
    50 
       
    51 
       
    52 
       
    53         Double.NEGATIVE_INFINITY,
       
    54         Double.POSITIVE_INFINITY,
       
    55         Double.NaN,
       
    56         (double) -0.0,
       
    57 
       
    58     };
       
    59 
       
    60     private static void relGet(DoubleBuffer b) {
       
    61         int n = b.capacity();
       
    62         for (int i = 0; i < n; i++)
       
    63             ck(b, (long)b.get(), (long)((double)ic(i)));
       
    64         b.rewind();
       
    65     }
       
    66 
       
    67     private static void relGet(DoubleBuffer b, int start) {
       
    68         int n = b.remaining();
       
    69         for (int i = start; i < n; i++)
       
    70             ck(b, (long)b.get(), (long)((double)ic(i)));
       
    71         b.rewind();
       
    72     }
       
    73 
       
    74     private static void absGet(DoubleBuffer b) {
       
    75         int n = b.capacity();
       
    76         for (int i = 0; i < n; i++)
       
    77             ck(b, (long)b.get(), (long)((double)ic(i)));
       
    78         b.rewind();
       
    79     }
       
    80 
       
    81     private static void bulkGet(DoubleBuffer b) {
       
    82         int n = b.capacity();
       
    83         double[] a = new double[n + 7];
       
    84         b.get(a, 7, n);
       
    85         for (int i = 0; i < n; i++) {
       
    86             ck(b, (long)a[i + 7], (long)((double)ic(i)));
       
    87         }
       
    88     }
       
    89 
       
    90     private static void relPut(DoubleBuffer b) {
       
    91         int n = b.capacity();
       
    92         b.clear();
       
    93         for (int i = 0; i < n; i++)
       
    94             b.put((double)ic(i));
       
    95         b.flip();
       
    96     }
       
    97 
       
    98     private static void absPut(DoubleBuffer b) {
       
    99         int n = b.capacity();
       
   100         b.clear();
       
   101         for (int i = 0; i < n; i++)
       
   102             b.put(i, (double)ic(i));
       
   103         b.limit(n);
       
   104         b.position(0);
       
   105     }
       
   106 
       
   107     private static void bulkPutArray(DoubleBuffer b) {
       
   108         int n = b.capacity();
       
   109         b.clear();
       
   110         double[] a = new double[n + 7];
       
   111         for (int i = 0; i < n; i++)
       
   112             a[i + 7] = (double)ic(i);
       
   113         b.put(a, 7, n);
       
   114         b.flip();
       
   115     }
       
   116 
       
   117     private static void bulkPutBuffer(DoubleBuffer b) {
       
   118         int n = b.capacity();
       
   119         b.clear();
       
   120         DoubleBuffer c = DoubleBuffer.allocate(n + 7);
       
   121         c.position(7);
       
   122         for (int i = 0; i < n; i++)
       
   123             c.put((double)ic(i));
       
   124         c.flip();
       
   125         c.position(7);
       
   126         b.put(c);
       
   127         b.flip();
       
   128         try {
       
   129             b.put(b);
       
   130             fail("IllegalArgumentException expected for put into same buffer");
       
   131         } catch (IllegalArgumentException e) {
       
   132             if (e.getMessage() == null) {
       
   133                 fail("Non-null IllegalArgumentException message expected from"
       
   134                      + " put into same buffer");
       
   135             }
       
   136         }
       
   137     }
       
   138 
       
   139     //6231529
       
   140     private static void callReset(DoubleBuffer b) {
       
   141         b.position(0);
       
   142         b.mark();
       
   143 
       
   144         b.duplicate().reset();
       
   145         b.asReadOnlyBuffer().reset();
       
   146     }
       
   147 
       
   148 
       
   149 
       
   150     // 6221101-6234263
       
   151 
       
   152     private static void putBuffer() {
       
   153         final int cap = 10;
       
   154 
       
   155         DoubleBuffer direct1 = ByteBuffer.allocateDirect(cap).asDoubleBuffer();
       
   156         DoubleBuffer nondirect1 = ByteBuffer.allocate(cap).asDoubleBuffer();
       
   157         direct1.put(nondirect1);
       
   158 
       
   159         DoubleBuffer direct2 = ByteBuffer.allocateDirect(cap).asDoubleBuffer();
       
   160         DoubleBuffer nondirect2 = ByteBuffer.allocate(cap).asDoubleBuffer();
       
   161         nondirect2.put(direct2);
       
   162 
       
   163         DoubleBuffer direct3 = ByteBuffer.allocateDirect(cap).asDoubleBuffer();
       
   164         DoubleBuffer direct4 = ByteBuffer.allocateDirect(cap).asDoubleBuffer();
       
   165         direct3.put(direct4);
       
   166 
       
   167         DoubleBuffer nondirect3 = ByteBuffer.allocate(cap).asDoubleBuffer();
       
   168         DoubleBuffer nondirect4 = ByteBuffer.allocate(cap).asDoubleBuffer();
       
   169         nondirect3.put(nondirect4);
       
   170     }
       
   171 
       
   172 
       
   173 
       
   174 
       
   175 
       
   176 
       
   177 
       
   178 
       
   179 
       
   180 
       
   181 
       
   182 
       
   183 
       
   184 
       
   185 
       
   186 
       
   187 
       
   188     private static void checkSlice(DoubleBuffer b, DoubleBuffer slice) {
       
   189         ck(slice, 0, slice.position());
       
   190         ck(slice, b.remaining(), slice.limit());
       
   191         ck(slice, b.remaining(), slice.capacity());
       
   192         if (b.isDirect() != slice.isDirect())
       
   193             fail("Lost direction", slice);
       
   194         if (b.isReadOnly() != slice.isReadOnly())
       
   195             fail("Lost read-only", slice);
       
   196     }
       
   197 
       
   198 
       
   199 
       
   200 
       
   201 
       
   202 
       
   203 
       
   204 
       
   205 
       
   206 
       
   207 
       
   208 
       
   209 
       
   210 
       
   211 
       
   212 
       
   213 
       
   214 
       
   215 
       
   216 
       
   217 
       
   218 
       
   219 
       
   220 
       
   221 
       
   222 
       
   223 
       
   224 
       
   225 
       
   226 
       
   227 
       
   228 
       
   229 
       
   230 
       
   231 
       
   232 
       
   233 
       
   234 
       
   235 
       
   236 
       
   237 
       
   238 
       
   239 
       
   240 
       
   241 
       
   242 
       
   243 
       
   244 
       
   245 
       
   246 
       
   247 
       
   248 
       
   249 
       
   250 
       
   251 
       
   252 
       
   253 
       
   254 
       
   255 
       
   256 
       
   257 
       
   258 
       
   259 
       
   260 
       
   261 
       
   262 
       
   263 
       
   264 
       
   265 
       
   266 
       
   267 
       
   268 
       
   269 
       
   270 
       
   271 
       
   272 
       
   273 
       
   274 
       
   275 
       
   276 
       
   277 
       
   278 
       
   279 
       
   280 
       
   281 
       
   282 
       
   283 
       
   284 
       
   285 
       
   286 
       
   287 
       
   288 
       
   289 
       
   290 
       
   291 
       
   292 
       
   293 
       
   294 
       
   295 
       
   296 
       
   297 
       
   298 
       
   299 
       
   300 
       
   301 
       
   302 
       
   303 
       
   304 
       
   305 
       
   306 
       
   307 
       
   308 
       
   309 
       
   310 
       
   311 
       
   312 
       
   313 
       
   314 
       
   315 
       
   316 
       
   317 
       
   318 
       
   319 
       
   320 
       
   321 
       
   322 
       
   323 
       
   324 
       
   325 
       
   326 
       
   327 
       
   328 
       
   329 
       
   330 
       
   331 
       
   332 
       
   333 
       
   334 
       
   335 
       
   336 
       
   337 
       
   338 
       
   339 
       
   340 
       
   341 
       
   342 
       
   343 
       
   344 
       
   345 
       
   346 
       
   347 
       
   348 
       
   349 
       
   350 
       
   351 
       
   352 
       
   353 
       
   354 
       
   355 
       
   356 
       
   357 
       
   358 
       
   359 
       
   360 
       
   361 
       
   362 
       
   363 
       
   364 
       
   365 
       
   366 
       
   367 
       
   368 
       
   369 
       
   370 
       
   371 
       
   372 
       
   373 
       
   374 
       
   375 
       
   376 
       
   377 
       
   378 
       
   379 
       
   380 
       
   381 
       
   382 
       
   383 
       
   384 
       
   385 
       
   386 
       
   387 
       
   388 
       
   389 
       
   390 
       
   391 
       
   392 
       
   393 
       
   394 
       
   395 
       
   396 
       
   397 
       
   398 
       
   399 
       
   400 
       
   401 
       
   402 
       
   403 
       
   404 
       
   405 
       
   406 
       
   407 
       
   408 
       
   409 
       
   410 
       
   411 
       
   412 
       
   413 
       
   414 
       
   415 
       
   416 
       
   417 
       
   418 
       
   419 
       
   420 
       
   421 
       
   422 
       
   423 
       
   424 
       
   425 
       
   426 
       
   427 
       
   428 
       
   429 
       
   430 
       
   431 
       
   432 
       
   433 
       
   434 
       
   435 
       
   436 
       
   437 
       
   438 
       
   439 
       
   440 
       
   441 
       
   442 
       
   443 
       
   444 
       
   445 
       
   446 
       
   447 
       
   448 
       
   449     private static void fail(String problem,
       
   450                              DoubleBuffer xb, DoubleBuffer yb,
       
   451                              double x, double y) {
       
   452         fail(problem + String.format(": x=%s y=%s", x, y), xb, yb);
       
   453     }
       
   454 
       
   455     private static void catchIllegalArgument(Buffer b, Runnable thunk) {
       
   456         tryCatch(b, IllegalArgumentException.class, thunk);
       
   457     }
       
   458 
       
   459     private static void catchReadOnlyBuffer(Buffer b, Runnable thunk) {
       
   460         tryCatch(b, ReadOnlyBufferException.class, thunk);
       
   461     }
       
   462 
       
   463     private static void catchIndexOutOfBounds(Buffer b, Runnable thunk) {
       
   464         tryCatch(b, IndexOutOfBoundsException.class, thunk);
       
   465     }
       
   466 
       
   467     private static void catchIndexOutOfBounds(double[] t, Runnable thunk) {
       
   468         tryCatch(t, IndexOutOfBoundsException.class, thunk);
       
   469     }
       
   470 
       
   471     private static void tryCatch(Buffer b, Class<?> ex, Runnable thunk) {
       
   472         boolean caught = false;
       
   473         try {
       
   474             thunk.run();
       
   475         } catch (Throwable x) {
       
   476             if (ex.isAssignableFrom(x.getClass())) {
       
   477                 caught = true;
       
   478             } else {
       
   479                 fail(x.getMessage() + " not expected");
       
   480             }
       
   481         }
       
   482         if (!caught) {
       
   483             fail(ex.getName() + " not thrown", b);
       
   484         }
       
   485     }
       
   486 
       
   487     private static void tryCatch(double[] t, Class<?> ex, Runnable thunk) {
       
   488         tryCatch(DoubleBuffer.wrap(t), ex, thunk);
       
   489     }
       
   490 
       
   491     public static void test(int level, final DoubleBuffer b, boolean direct) {
       
   492 
       
   493         show(level, b);
       
   494 
       
   495         if (direct != b.isDirect())
       
   496             fail("Wrong direction", b);
       
   497 
       
   498         // Gets and puts
       
   499 
       
   500         relPut(b);
       
   501         relGet(b);
       
   502         absGet(b);
       
   503         bulkGet(b);
       
   504 
       
   505         absPut(b);
       
   506         relGet(b);
       
   507         absGet(b);
       
   508         bulkGet(b);
       
   509 
       
   510         bulkPutArray(b);
       
   511         relGet(b);
       
   512 
       
   513         bulkPutBuffer(b);
       
   514         relGet(b);
       
   515 
       
   516 
       
   517 
       
   518 
       
   519 
       
   520 
       
   521 
       
   522 
       
   523 
       
   524 
       
   525 
       
   526 
       
   527 
       
   528 
       
   529 
       
   530 
       
   531 
       
   532 
       
   533 
       
   534 
       
   535 
       
   536 
       
   537 
       
   538 
       
   539 
       
   540 
       
   541 
       
   542 
       
   543 
       
   544 
       
   545 
       
   546 
       
   547 
       
   548 
       
   549 
       
   550 
       
   551 
       
   552         // Compact
       
   553 
       
   554         relPut(b);
       
   555         b.position(13);
       
   556         b.compact();
       
   557         b.flip();
       
   558         relGet(b, 13);
       
   559 
       
   560         // Exceptions
       
   561 
       
   562         relPut(b);
       
   563         b.limit(b.capacity() / 2);
       
   564         b.position(b.limit());
       
   565 
       
   566         tryCatch(b, BufferUnderflowException.class, () -> b.get());
       
   567         tryCatch(b, BufferOverflowException.class, () -> b.put((double)42));
       
   568         // The index must be non-negative and less than the buffer's limit.
       
   569         catchIndexOutOfBounds(b, () -> b.get(b.limit()));
       
   570         catchIndexOutOfBounds(b, () -> b.get(-1));
       
   571         catchIndexOutOfBounds(b, () -> b.put(b.limit(), (double)42));
       
   572         tryCatch(b, InvalidMarkException.class,
       
   573                 () -> b.position(0).mark().compact().reset());
       
   574 
       
   575         try {
       
   576             b.position(b.limit() + 1);
       
   577             fail("IllegalArgumentException expected for position beyond limit");
       
   578         } catch (IllegalArgumentException e) {
       
   579             if (e.getMessage() == null) {
       
   580                 fail("Non-null IllegalArgumentException message expected for"
       
   581                      + " position beyond limit");
       
   582             }
       
   583         }
       
   584 
       
   585         try {
       
   586             b.position(-1);
       
   587             fail("IllegalArgumentException expected for negative position");
       
   588         } catch (IllegalArgumentException e) {
       
   589             if (e.getMessage() == null) {
       
   590                 fail("Non-null IllegalArgumentException message expected for"
       
   591                      + " negative position");
       
   592             }
       
   593         }
       
   594 
       
   595         try {
       
   596             b.limit(b.capacity() + 1);
       
   597             fail("IllegalArgumentException expected for limit beyond capacity");
       
   598         } catch (IllegalArgumentException e) {
       
   599             if (e.getMessage() == null) {
       
   600                 fail("Non-null IllegalArgumentException message expected for"
       
   601                      + " limit beyond capacity");
       
   602             }
       
   603         }
       
   604 
       
   605         try {
       
   606             b.limit(-1);
       
   607             fail("IllegalArgumentException expected for negative limit");
       
   608         } catch (IllegalArgumentException e) {
       
   609             if (e.getMessage() == null) {
       
   610                 fail("Non-null IllegalArgumentException message expected for"
       
   611                      + " negative limit");
       
   612             }
       
   613         }
       
   614 
       
   615         // Values
       
   616 
       
   617         b.clear();
       
   618         b.put((double)0);
       
   619         b.put((double)-1);
       
   620         b.put((double)1);
       
   621         b.put(Double.MAX_VALUE);
       
   622         b.put(Double.MIN_VALUE);
       
   623 
       
   624 
       
   625 
       
   626 
       
   627 
       
   628 
       
   629 
       
   630 
       
   631 
       
   632         b.put(-Double.MAX_VALUE);
       
   633         b.put(-Double.MIN_VALUE);
       
   634         b.put(Double.NEGATIVE_INFINITY);
       
   635         b.put(Double.POSITIVE_INFINITY);
       
   636         b.put(Double.NaN);
       
   637         b.put(0.5121609353879392);      // Changes value if incorrectly swapped
       
   638 
       
   639 
       
   640         b.flip();
       
   641         ck(b, b.get(), 0);
       
   642         ck(b, b.get(), (double)-1);
       
   643         ck(b, b.get(), 1);
       
   644         ck(b, b.get(), Double.MAX_VALUE);
       
   645         ck(b, b.get(), Double.MIN_VALUE);
       
   646 
       
   647 
       
   648 
       
   649 
       
   650 
       
   651 
       
   652 
       
   653 
       
   654 
       
   655 
       
   656 
       
   657 
       
   658 
       
   659 
       
   660         double v;
       
   661         ck(b, b.get(), -Double.MAX_VALUE);
       
   662         ck(b, b.get(), -Double.MIN_VALUE);
       
   663         ck(b, b.get(), Double.NEGATIVE_INFINITY);
       
   664         ck(b, b.get(), Double.POSITIVE_INFINITY);
       
   665         if (Double.doubleToRawLongBits(v = b.get())
       
   666             != Double.doubleToRawLongBits(Double.NaN)) {
       
   667             fail(b, (long)Double.NaN, (long)v);
       
   668         }
       
   669         ck(b, b.get(), 0.5121609353879392);
       
   670 
       
   671 
       
   672 
       
   673         // Comparison
       
   674         b.rewind();
       
   675         DoubleBuffer b2 = DoubleBuffer.allocate(b.capacity());
       
   676         b2.put(b);
       
   677         b2.flip();
       
   678         b.position(2);
       
   679         b2.position(2);
       
   680         if (!b.equals(b2)) {
       
   681             for (int i = 2; i < b.limit(); i++) {
       
   682                 double x = b.get(i);
       
   683                 double y = b2.get(i);
       
   684                 if (x != y
       
   685 
       
   686                     || Double.compare(x, y) != 0
       
   687 
       
   688 
       
   689 
       
   690 
       
   691                     ) {
       
   692                     out.println("[" + i + "] " + x + " != " + y);
       
   693                 }
       
   694             }
       
   695             fail("Identical buffers not equal", b, b2);
       
   696         }
       
   697         if (b.compareTo(b2) != 0) {
       
   698             fail("Comparison to identical buffer != 0", b, b2);
       
   699         }
       
   700         b.limit(b.limit() + 1);
       
   701         b.position(b.limit() - 1);
       
   702         b.put((double)99);
       
   703         b.rewind();
       
   704         b2.rewind();
       
   705         if (b.equals(b2))
       
   706             fail("Non-identical buffers equal", b, b2);
       
   707         if (b.compareTo(b2) <= 0)
       
   708             fail("Comparison to shorter buffer <= 0", b, b2);
       
   709         b.limit(b.limit() - 1);
       
   710 
       
   711         b.put(2, (double)42);
       
   712         if (b.equals(b2))
       
   713             fail("Non-identical buffers equal", b, b2);
       
   714         if (b.compareTo(b2) <= 0)
       
   715             fail("Comparison to lesser buffer <= 0", b, b2);
       
   716 
       
   717         // Check equals and compareTo with interesting values
       
   718         for (double x : VALUES) {
       
   719             DoubleBuffer xb = DoubleBuffer.wrap(new double[] { x });
       
   720             if (xb.compareTo(xb) != 0) {
       
   721                 fail("compareTo not reflexive", xb, xb, x, x);
       
   722             }
       
   723             if (!xb.equals(xb)) {
       
   724                 fail("equals not reflexive", xb, xb, x, x);
       
   725             }
       
   726             for (double y : VALUES) {
       
   727                 DoubleBuffer yb = DoubleBuffer.wrap(new double[] { y });
       
   728                 if (xb.compareTo(yb) != - yb.compareTo(xb)) {
       
   729                     fail("compareTo not anti-symmetric",
       
   730                          xb, yb, x, y);
       
   731                 }
       
   732                 if ((xb.compareTo(yb) == 0) != xb.equals(yb)) {
       
   733                     fail("compareTo inconsistent with equals",
       
   734                          xb, yb, x, y);
       
   735                 }
       
   736                 if (xb.compareTo(yb) != Double.compare(x, y)) {
       
   737 
       
   738 
       
   739 
       
   740 
       
   741                     if (x == 0.0 && y == 0.0) continue;
       
   742 
       
   743                     fail("Incorrect results for DoubleBuffer.compareTo",
       
   744                          xb, yb, x, y);
       
   745                 }
       
   746                 if (xb.equals(yb) != ((x == y) || ((x != x) && (y != y)))) {
       
   747                     fail("Incorrect results for DoubleBuffer.equals",
       
   748                          xb, yb, x, y);
       
   749                 }
       
   750             }
       
   751         }
       
   752 
       
   753         // Sub, dup
       
   754 
       
   755         relPut(b);
       
   756         relGet(b.duplicate());
       
   757         b.position(13);
       
   758         relGet(b.duplicate(), 13);
       
   759         relGet(b.duplicate().slice(), 13);
       
   760         relGet(b.slice(), 13);
       
   761         relGet(b.slice().duplicate(), 13);
       
   762 
       
   763         // Slice
       
   764 
       
   765         b.position(5);
       
   766         DoubleBuffer sb = b.slice();
       
   767         checkSlice(b, sb);
       
   768         b.position(0);
       
   769         DoubleBuffer sb2 = sb.slice();
       
   770         checkSlice(sb, sb2);
       
   771 
       
   772         if (!sb.equals(sb2))
       
   773             fail("Sliced slices do not match", sb, sb2);
       
   774         if ((sb.hasArray()) && (sb.arrayOffset() != sb2.arrayOffset())) {
       
   775             fail("Array offsets do not match: "
       
   776                  + sb.arrayOffset() + " != " + sb2.arrayOffset(), sb, sb2);
       
   777         }
       
   778 
       
   779 
       
   780 
       
   781 
       
   782 
       
   783 
       
   784 
       
   785 
       
   786 
       
   787 
       
   788 
       
   789 
       
   790 
       
   791 
       
   792 
       
   793 
       
   794 
       
   795 
       
   796 
       
   797 
       
   798 
       
   799 
       
   800 
       
   801 
       
   802 
       
   803 
       
   804 
       
   805 
       
   806 
       
   807 
       
   808 
       
   809 
       
   810         // Read-only views
       
   811 
       
   812         b.rewind();
       
   813         final DoubleBuffer rb = b.asReadOnlyBuffer();
       
   814         if (!b.equals(rb))
       
   815             fail("Buffer not equal to read-only view", b, rb);
       
   816         show(level + 1, rb);
       
   817 
       
   818         catchReadOnlyBuffer(b, () -> relPut(rb));
       
   819         catchReadOnlyBuffer(b, () -> absPut(rb));
       
   820         catchReadOnlyBuffer(b, () -> bulkPutArray(rb));
       
   821         catchReadOnlyBuffer(b, () -> bulkPutBuffer(rb));
       
   822 
       
   823         // put(DoubleBuffer) should not change source position
       
   824         final DoubleBuffer src = DoubleBuffer.allocate(1);
       
   825         catchReadOnlyBuffer(b, () -> rb.put(src));
       
   826         ck(src, src.position(), 0);
       
   827 
       
   828         catchReadOnlyBuffer(b, () -> rb.compact());
       
   829 
       
   830 
       
   831 
       
   832 
       
   833 
       
   834 
       
   835 
       
   836 
       
   837 
       
   838 
       
   839 
       
   840 
       
   841 
       
   842 
       
   843 
       
   844 
       
   845 
       
   846 
       
   847 
       
   848 
       
   849 
       
   850 
       
   851 
       
   852 
       
   853 
       
   854 
       
   855         if (rb.getClass().getName().startsWith("java.nio.Heap")) {
       
   856             catchReadOnlyBuffer(b, () -> rb.array());
       
   857             catchReadOnlyBuffer(b, () -> rb.arrayOffset());
       
   858             if (rb.hasArray()) {
       
   859                 fail("Read-only heap buffer's backing array is accessible", rb);
       
   860             }
       
   861         }
       
   862 
       
   863         // Bulk puts from read-only buffers
       
   864 
       
   865         b.clear();
       
   866         rb.rewind();
       
   867         b.put(rb);
       
   868 
       
   869 
       
   870 
       
   871 
       
   872 
       
   873 
       
   874 
       
   875 
       
   876 
       
   877 
       
   878 
       
   879         relPut(b);                       // Required by testViews
       
   880 
       
   881 
       
   882 
       
   883 
       
   884 
       
   885 
       
   886     }
       
   887 
       
   888 
       
   889 
       
   890 
       
   891 
       
   892 
       
   893 
       
   894 
       
   895 
       
   896 
       
   897 
       
   898 
       
   899 
       
   900 
       
   901 
       
   902 
       
   903 
       
   904 
       
   905 
       
   906 
       
   907 
       
   908 
       
   909 
       
   910 
       
   911 
       
   912 
       
   913 
       
   914 
       
   915 
       
   916 
       
   917 
       
   918 
       
   919 
       
   920 
       
   921 
       
   922 
       
   923 
       
   924 
       
   925 
       
   926 
       
   927 
       
   928 
       
   929 
       
   930 
       
   931     public static void test(final double [] ba) {
       
   932         int offset = 47;
       
   933         int length = 900;
       
   934         final DoubleBuffer b = DoubleBuffer.wrap(ba, offset, length);
       
   935         show(0, b);
       
   936         ck(b, b.capacity(), ba.length);
       
   937         ck(b, b.position(), offset);
       
   938         ck(b, b.limit(), offset + length);
       
   939 
       
   940         // The offset must be non-negative and no larger than <array.length>.
       
   941         catchIndexOutOfBounds(ba, () -> DoubleBuffer.wrap(ba, -1, ba.length));
       
   942         catchIndexOutOfBounds(ba, () -> DoubleBuffer.wrap(ba, ba.length + 1, ba.length));
       
   943         catchIndexOutOfBounds(ba, () -> DoubleBuffer.wrap(ba, 0, -1));
       
   944         catchIndexOutOfBounds(ba, () -> DoubleBuffer.wrap(ba, 0, ba.length + 1));
       
   945 
       
   946         // A NullPointerException will be thrown if the array is null.
       
   947         tryCatch(ba, NullPointerException.class,
       
   948                 () -> DoubleBuffer.wrap((double []) null, 0, 5));
       
   949         tryCatch(ba, NullPointerException.class,
       
   950                 () -> DoubleBuffer.wrap((double []) null));
       
   951     }
       
   952 
       
   953     private static void testAllocate() {
       
   954         // An IllegalArgumentException will be thrown for negative capacities.
       
   955         catchIllegalArgument((Buffer) null, () -> DoubleBuffer.allocate(-1));
       
   956         try {
       
   957             DoubleBuffer.allocate(-1);
       
   958         } catch (IllegalArgumentException e) {
       
   959             if (e.getMessage() == null) {
       
   960                 fail("Non-null IllegalArgumentException message expected for"
       
   961                      + " attempt to allocate negative capacity buffer");
       
   962             }
       
   963         }
       
   964 
       
   965 
       
   966 
       
   967 
       
   968 
       
   969 
       
   970 
       
   971 
       
   972 
       
   973 
       
   974 
       
   975     }
       
   976 
       
   977     public static void test() {
       
   978         testAllocate();
       
   979         test(0, DoubleBuffer.allocate(7 * 1024), false);
       
   980         test(0, DoubleBuffer.wrap(new double[7 * 1024], 0, 7 * 1024), false);
       
   981         test(new double[1024]);
       
   982 
       
   983 
       
   984 
       
   985 
       
   986 
       
   987 
       
   988 
       
   989 
       
   990 
       
   991 
       
   992         callReset(DoubleBuffer.allocate(10));
       
   993 
       
   994 
       
   995 
       
   996         putBuffer();
       
   997 
       
   998     }
       
   999 
       
  1000 }