View Javadoc
1   package org.djutils.primitives;
2   
3   import org.junit.Test;
4   
5   import junit.framework.TestCase;
6   
7   /**
8    * The JUNIT Test for the <code>Primitive</code>.
9    * <p>
10   * Copyright (c) 2002-2022 Delft University of Technology, Jaffalaan 5, 2628 BX Delft, the Netherlands. All rights reserved. See
11   * for project information <a href="https://djutils.org" target="_blank"> https://djutils.org</a>. The DJUTILS project is
12   * distributed under a three-clause BSD-style license, which can be found at
13   * <a href="https://djutils.org/docs/license.html" target="_blank"> https://djutils.org/docs/license.html</a>.
14   * </p>
15   * @author <a href="https://www.linkedin.com/in/peterhmjacobs">Peter Jacobs </a>
16   */
17  public class PrimitiveTest extends TestCase
18  {
19  
20      /**
21       * Test most of the Primitive class.
22       */
23      @Test
24      public void test()
25      {
26          assertEquals(Primitive.getPrimitive(Boolean.class), boolean.class);
27          assertEquals(Primitive.getPrimitive(Integer.class), int.class);
28          assertEquals(Primitive.getPrimitive(Double.class), double.class);
29          assertEquals(Primitive.getPrimitive(Float.class), float.class);
30          assertEquals(Primitive.getPrimitive(Character.class), char.class);
31          assertEquals(Primitive.getPrimitive(Byte.class), byte.class);
32          assertEquals(Primitive.getPrimitive(Short.class), short.class);
33          assertEquals(Primitive.getPrimitive(Long.class), long.class);
34          assertNull(Primitive.getPrimitive(String.class));
35  
36          assertEquals(Primitive.getWrapper(boolean.class), Boolean.class);
37          assertEquals(Primitive.getWrapper(int.class), Integer.class);
38          assertEquals(Primitive.getWrapper(double.class), Double.class);
39          assertEquals(Primitive.getWrapper(float.class), Float.class);
40          assertEquals(Primitive.getWrapper(char.class), Character.class);
41          assertEquals(Primitive.getWrapper(byte.class), Byte.class);
42          assertEquals(Primitive.getWrapper(long.class), Long.class);
43          assertEquals(Primitive.getWrapper(short.class), Short.class);
44          try
45          {
46              Primitive.getWrapper(String[].class);
47              fail("getWrapper for non primitive class should have thrown an IllegalArgumentException");
48          }
49          catch (IllegalArgumentException iae)
50          {
51              // Ignore expected exception
52          }
53  
54          assertEquals(Primitive.toBoolean(Integer.valueOf(1)), Boolean.TRUE);
55          assertEquals(Primitive.toBoolean(1.0), Boolean.TRUE);
56          assertEquals(Primitive.toBoolean(1.0f), Boolean.TRUE);
57          assertEquals(Primitive.toBoolean((short) 1.0), Boolean.TRUE);
58          assertEquals(Primitive.toBoolean(1L), Boolean.TRUE);
59  
60          assertEquals(Primitive.toBoolean(Integer.valueOf(0)), Boolean.FALSE);
61          assertEquals(Primitive.toBoolean(0.0), Boolean.FALSE);
62          assertEquals(Primitive.toBoolean(0.0f), Boolean.FALSE);
63          assertEquals(Primitive.toBoolean((short) 0.0), Boolean.FALSE);
64          assertEquals(Primitive.toBoolean(0L), Boolean.FALSE);
65          try
66          {
67              Primitive.toBoolean(Integer.valueOf(-1));
68              fail("casting number not in {0, 1} to boolean should have thrown an IllegalArgumentException");
69          }
70          catch (IllegalArgumentException iae)
71          {
72              // Ignore expected exception
73          }
74          try
75          {
76              Primitive.toBoolean(Integer.valueOf(2));
77              fail("casting number not in {0, 1} to boolean should have thrown an IllegalArgumentException");
78          }
79          catch (IllegalArgumentException iae)
80          {
81              // Ignore expected exception
82          }
83          try
84          {
85              Primitive.toBoolean(new String[] {"ab", "cd"});
86              fail("casting unrelated object to boolean should have thrown a ClassCastException");
87          }
88          catch (ClassCastException cce)
89          {
90              // Ignore expected exception
91          }
92          assertEquals(Primitive.toBoolean(false), Boolean.FALSE);
93          assertEquals(Primitive.toBoolean(true), Boolean.TRUE);
94  
95          assertEquals((Integer) 0x61, Primitive.toInteger('a'));
96          assertEquals((Integer) 1, Primitive.toInteger(true));
97          assertEquals((Integer) 0, Primitive.toInteger(false));
98      }
99  
100     /**
101      * Test the cast methods.
102      */
103     @Test
104     public void testCast()
105     {
106         String junk = "Junk";
107         assertEquals(junk, Primitive.cast(String.class, junk));
108         assertEquals(true, Primitive.cast(boolean.class, 1));
109         assertEquals('a', Primitive.cast(char.class, 0x61));
110         Byte b = 0x77;
111         assertEquals(b, Primitive.cast(byte.class, 0x77));
112         assertEquals(123.0, Primitive.cast(double.class, 123L));
113         assertEquals(123.0f, Primitive.cast(float.class, 123L));
114         assertEquals(123456L, Primitive.cast(long.class, 123456.0));
115         assertEquals(-123456, Primitive.cast(int.class, -123456.0));
116         assertEquals((short) -123, Primitive.cast(short.class, -123.0));
117         Object[] in = new Object[] {123, 2.0};
118         Class<?>[] to = new Class[] {float.class, byte.class};
119         Object[] out = Primitive.cast(to, in);
120         assertEquals(123.0f, out[0]);
121         assertEquals((byte) 2, out[1]);
122     }
123 
124     /**
125      * test the isPrimitiveAssignable method.
126      */
127     @Test
128     public void testPrimitiveAssignable()
129     {
130         assertFalse(Primitive.isPrimitiveAssignableFrom(Integer.class, Number.class));
131         assertTrue(Primitive.isPrimitiveAssignableFrom(Number.class, Integer.class));
132         assertFalse(Primitive.isPrimitiveAssignableFrom(double.class, Number.class));
133         assertTrue(Primitive.isPrimitiveAssignableFrom(Number.class, double.class));
134         assertTrue(Primitive.isPrimitiveAssignableFrom(Integer.class, int.class));
135         assertFalse(Primitive.isPrimitiveAssignableFrom(Double.class, Integer.class));
136         assertTrue(Primitive.isPrimitiveAssignableFrom(long.class, Long.class));
137         assertFalse(Primitive.isPrimitiveAssignableFrom(double.class, int.class));
138         assertFalse(Primitive.isPrimitiveAssignableFrom(Double.class, int.class));
139         assertFalse(Primitive.isPrimitiveAssignableFrom(double.class, Integer.class));
140         assertFalse(Primitive.isPrimitiveAssignableFrom(String.class, CharSequence.class));
141         assertTrue(Primitive.isPrimitiveAssignableFrom(CharSequence.class, String.class));
142     }
143 }