|
54 | 54 | import org.scijava.Context; |
55 | 55 | import org.scijava.Priority; |
56 | 56 | import org.scijava.plugin.Plugin; |
| 57 | +import org.scijava.util.BoolArray; |
| 58 | +import org.scijava.util.CharArray; |
57 | 59 | import org.scijava.util.ClassUtils; |
| 60 | +import org.scijava.util.DoubleArray; |
| 61 | +import org.scijava.util.FloatArray; |
| 62 | +import org.scijava.util.IntArray; |
58 | 63 | import org.scijava.util.LongArray; |
| 64 | +import org.scijava.util.PrimitiveArray; |
| 65 | +import org.scijava.util.ShortArray; |
59 | 66 |
|
60 | 67 | /** |
61 | 68 | * Tests {@link ConvertService}. |
@@ -121,6 +128,47 @@ public void testPrimitives() { |
121 | 128 | assertTrue(1d == convertService.convert(1.0, double.class)); |
122 | 129 | } |
123 | 130 |
|
| 131 | + /** |
| 132 | + * Test conversion between primitive types, {@link PrimitiveArray}s and |
| 133 | + * {@link List}s of {@link Number}s. |
| 134 | + */ |
| 135 | + @Test |
| 136 | + public void testArrays() { |
| 137 | + testIntechangeable(int[].class, IntArray.class); |
| 138 | + testIntechangeable(long[].class, LongArray.class); |
| 139 | + testIntechangeable(double[].class, DoubleArray.class); |
| 140 | + testIntechangeable(float[].class, FloatArray.class); |
| 141 | + testIntechangeable(short[].class, ShortArray.class); |
| 142 | + testIntechangeable(char[].class, CharArray.class); |
| 143 | + testIntechangeable(boolean[].class, BoolArray.class); |
| 144 | + |
| 145 | + assertTrue(convertService.supports(List.class, int[].class)); |
| 146 | + assertTrue(convertService.supports(List.class, long[].class)); |
| 147 | + assertTrue(convertService.supports(List.class, double[].class)); |
| 148 | + assertTrue(convertService.supports(List.class, float[].class)); |
| 149 | + assertTrue(convertService.supports(List.class, short[].class)); |
| 150 | + assertTrue(convertService.supports(List.class, char[].class)); |
| 151 | + assertTrue(convertService.supports(List.class, boolean[].class)); |
| 152 | + |
| 153 | + final List<Integer> list = new ArrayList<Integer>(); |
| 154 | + |
| 155 | + for (int i=0; i<100; i++) list.add((int) (10000 * Math.random())); |
| 156 | + |
| 157 | + final int[] primitives = convertService.convert(list, int[].class); |
| 158 | + |
| 159 | + final IntArray intArray = convertService.convert(primitives, IntArray.class); |
| 160 | + |
| 161 | + // Should just unwrap the IntArray |
| 162 | + assertTrue(primitives == convertService.convert(intArray, int[].class)); |
| 163 | + |
| 164 | + // Verify all our lists are the same |
| 165 | + |
| 166 | + for (int i=0; i<list.size(); i++) { |
| 167 | + assertTrue(list.get(i) == primitives[i]); |
| 168 | + assertTrue(list.get(i) == intArray.getValue(i)); |
| 169 | + } |
| 170 | + } |
| 171 | + |
124 | 172 | /** Tests {@link ConvertService#supports(Class, Class)}. */ |
125 | 173 | @Test |
126 | 174 | public void testCanConvert() { |
@@ -664,4 +712,14 @@ public <T> T convert(Object src, Class<T> dest) { |
664 | 712 | return null; |
665 | 713 | } |
666 | 714 | } |
| 715 | + |
| 716 | + // -- Helper methods -- |
| 717 | + |
| 718 | + /** |
| 719 | + * Verify bi-direciotnal conversion is supported between the two classes |
| 720 | + */ |
| 721 | + private void testIntechangeable(final Class<?> c1, final Class<?> c2) { |
| 722 | + assertTrue(convertService.supports(c1, c2)); |
| 723 | + assertTrue(convertService.supports(c2, c1)); |
| 724 | + } |
667 | 725 | } |
0 commit comments