View Javadoc
1   /*
2    * Licensed to the Apache Software Foundation (ASF) under one or more
3    * contributor license agreements.  See the NOTICE file distributed with
4    * this work for additional information regarding copyright ownership.
5    * The ASF licenses this file to You under the Apache License, Version 2.0
6    * (the "License"); you may not use this file except in compliance with
7    * the License.  You may obtain a copy of the License at
8    *
9    *      http://www.apache.org/licenses/LICENSE-2.0
10   *
11   * Unless required by applicable law or agreed to in writing, software
12   * distributed under the License is distributed on an "AS IS" BASIS,
13   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14   * See the License for the specific language governing permissions and
15   * limitations under the License.
16   */
17  package org.apache.commons.rng.sampling.shape;
18  
19  import org.junit.jupiter.api.Assertions;
20  import org.junit.jupiter.api.Test;
21  
22  /**
23   * Test for {@link Coordinates} utility class.
24   */
25  class CoordinatesTest {
26      /**
27       * Test {@link Coordinates#requireFinite(double[], String)} detects infinite and NaN.
28       */
29      @Test
30      void testRequireFiniteWithMessageThrows() {
31          final double[] c = {0, 1, 2};
32          final String message = "This should be prepended";
33          Assertions.assertSame(c, Coordinates.requireFinite(c, message));
34          final double[] bad = {Double.POSITIVE_INFINITY, Double.NEGATIVE_INFINITY, Double.NaN};
35          for (int i = 0; i < c.length; i++) {
36              final int ii = i;
37              for (final double d : bad) {
38                  final double value = c[i];
39                  c[i] = d;
40                  final IllegalArgumentException ex = Assertions.assertThrows(IllegalArgumentException.class,
41                      () -> Coordinates.requireFinite(c, message),
42                      () -> String.format("Did not detect non-finite coordinate: %d = %s", ii, d));
43                  Assertions.assertTrue(ex.getMessage().startsWith(message), "Missing message prefix");
44                  c[i] = value;
45              }
46          }
47      }
48  
49      /**
50       * Test {@link Coordinates#requireLength(double[], int, String)} detects invalid lengths.
51       */
52      @Test
53      void testRequireLengthWithMessageThrows() {
54          final String message = "This should be prepended";
55          for (final double[] c : new double[][] {{0, 1}, {0, 1, 2}}) {
56              final int length = c.length;
57              Assertions.assertSame(c, Coordinates.requireLength(c, length, message));
58              IllegalArgumentException ex = Assertions.assertThrows(IllegalArgumentException.class,
59                  () -> Coordinates.requireLength(c, length - 1, message),
60                  () -> "Did not detect length was too long: " + (length - 1));
61              Assertions.assertTrue(ex.getMessage().startsWith(message), "Missing message prefix");
62              ex = Assertions.assertThrows(IllegalArgumentException.class,
63                  () -> Coordinates.requireLength(c, length + 1, message),
64                  () -> "Did not detect length was too short: " + (length + 1));
65              Assertions.assertTrue(ex.getMessage().startsWith(message), "Missing message prefix");
66          }
67      }
68  }