X Tutup
Skip to content

Commit 28fcec0

Browse files
committed
Write a better list converter
1 parent cc51709 commit 28fcec0

File tree

6 files changed

+51
-34
lines changed

6 files changed

+51
-34
lines changed

scijava-ops-engine/src/main/java/module-info.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -290,6 +290,7 @@
290290
org.scijava.ops.engine.math.Power,
291291
org.scijava.ops.engine.math.Sqrt,
292292
org.scijava.ops.engine.math.Zero,
293+
org.scijava.ops.engine.matcher.convert.ListConverterCollection,
293294
org.scijava.ops.engine.matcher.convert.PrimitiveArrayConverters,
294295
org.scijava.ops.engine.matcher.convert.PrimitiveConverters,
295296
org.scijava.ops.engine.stats.Mean,

scijava-ops-engine/src/main/java/org/scijava/ops/engine/matcher/convert/PrimitiveListConverter.java renamed to scijava-ops-engine/src/main/java/org/scijava/ops/engine/matcher/convert/ListConverterCollection.java

Lines changed: 16 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -29,31 +29,35 @@
2929

3030
package org.scijava.ops.engine.matcher.convert;
3131

32+
import org.scijava.ops.spi.OpCollection;
33+
import org.scijava.ops.spi.OpDependency;
34+
import org.scijava.ops.spi.OpMethod;
35+
import org.scijava.priority.Priority;
36+
3237
import java.util.List;
3338
import java.util.function.Function;
34-
35-
import org.scijava.ops.spi.Op;
36-
import org.scijava.ops.spi.OpClass;
39+
import java.util.stream.Collectors;
3740

3841
/**
3942
* Converts {@link List}s of types extending {@link Number}.
4043
*
4144
* @author Gabriel Selzer
4245
*/
43-
@OpClass(names = "engine.convert")
44-
public class PrimitiveListConverter<T extends Number> implements
45-
Function<List<T>, List<Number>>, Op
46-
{
46+
public class ListConverterCollection implements OpCollection {
4747

48-
@Override
4948
/**
5049
* @param t the input List
5150
* @return a List whose elements have been converted
5251
*/
53-
public List<Number> apply(List<T> t) {
54-
@SuppressWarnings({ "unchecked", "rawtypes" })
55-
List<Number> numberList = (List) t;
56-
return numberList;
52+
@OpMethod( //
53+
names = "engine.convert", //
54+
type = Function.class, //
55+
priority = Priority.LOW //
56+
)
57+
public static <T, U> List<U> convert(@OpDependency(
58+
name = "engine.convert") Function<T, U> elementConverter, List<T> t)
59+
{
60+
return t.stream().map(elementConverter).collect(Collectors.toList());
5761
}
5862

5963
}

scijava-ops-engine/src/test/java/org/scijava/ops/engine/impl/ServiceLoaderDiscoveryIntegrationTest.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -61,13 +61,13 @@ public void opDiscoveryRegressionIT() {
6161
public void opCollectionDiscoveryRegressionIT() {
6262
final Discoverer d = Discoverer.using(ServiceLoader::load);
6363
final List<OpCollection> discoveries = d.discover(OpCollection.class);
64-
Assertions.assertEquals(21, discoveries.size());
64+
Assertions.assertEquals(22, discoveries.size());
6565
@SuppressWarnings("unused")
6666
final OpInfoGenerator g = new OpCollectionInfoGenerator();
6767
final List<OpInfo> infos = discoveries.stream() //
6868
.flatMap(c -> g.generateInfosFrom(c).stream()) //
6969
.collect(Collectors.toList());
70-
Assertions.assertEquals(299, infos.size());
70+
Assertions.assertEquals(300, infos.size());
7171
}
7272

7373
}

scijava-ops-engine/src/test/java/org/scijava/ops/engine/matcher/convert/PrimitiveListConverterTest.java

Lines changed: 30 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -34,33 +34,44 @@
3434
import static org.junit.jupiter.api.Assertions.assertTrue;
3535

3636
import java.util.ArrayList;
37+
import java.util.Arrays;
3738
import java.util.LinkedList;
3839
import java.util.List;
40+
import java.util.function.Function;
41+
import java.util.stream.Collectors;
3942

43+
import org.junit.jupiter.api.Assertions;
44+
import org.junit.jupiter.api.BeforeAll;
4045
import org.junit.jupiter.api.Test;
46+
import org.scijava.ops.engine.AbstractTestEnvironment;
47+
import org.scijava.ops.spi.Op;
48+
import org.scijava.ops.spi.OpCollection;
49+
import org.scijava.ops.spi.OpField;
50+
import org.scijava.types.Nil;
4151

42-
public class PrimitiveListConverterTest {
52+
public class PrimitiveListConverterTest extends AbstractTestEnvironment
53+
implements OpCollection
54+
{
4355

44-
@Test
45-
public void testLinkedListConverter() {
46-
List<Long> list = new LinkedList<>();
47-
list.add(5l);
48-
PrimitiveListConverter<Long> converter = new PrimitiveListConverter<>();
49-
List<Number> newList = converter.apply(list);
50-
assertTrue(newList instanceof LinkedList);
51-
assertFalse(newList instanceof ArrayList);
52-
assertEquals(newList.get(0), 5l);
56+
@BeforeAll
57+
public static void addNeededOps() {
58+
ops.register(new PrimitiveListConverterTest(),
59+
new ListConverterCollection(), new PrimitiveConverters<>(),
60+
new IdentityCollection<>());
5361
}
5462

63+
@OpField(names = "test.listConversion")
64+
public final Function<List<Integer>, List<Integer>> foo = (in) -> in.stream()
65+
.map(i -> i * 2 + 1).collect(Collectors.toList());
66+
5567
@Test
56-
public void testArrayListConverter() {
57-
List<Long> list = new ArrayList<>();
58-
list.add(5l);
59-
PrimitiveListConverter<Long> converter = new PrimitiveListConverter<>();
60-
List<Number> newList = converter.apply(list);
61-
assertFalse(newList instanceof LinkedList);
62-
assertTrue(newList instanceof ArrayList);
63-
assertEquals(newList.get(0), 5l);
68+
public void testLinkedListConverter() {
69+
var outNil = new Nil<List<Integer>>() {};
70+
var in = Arrays.asList(1.0, 2.0);
71+
var out = ops.unary("test.listConversion").input(in).outType(outNil)
72+
.apply();
73+
for (int i = 0; i < in.size(); i++) {
74+
Assertions.assertEquals(in.get(i) * 2 + 1, (double) out.get(i));
75+
}
6476
}
65-
6677
}

scijava-ops-engine/templates/main/java/module-info.vm

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -133,6 +133,7 @@ module org.scijava.ops.engine {
133133
org.scijava.ops.engine.math.Power,
134134
org.scijava.ops.engine.math.Sqrt,
135135
org.scijava.ops.engine.math.Zero,
136+
org.scijava.ops.engine.matcher.convert.ListConverterCollection,
136137
org.scijava.ops.engine.matcher.convert.PrimitiveArrayConverters,
137138
org.scijava.ops.engine.matcher.convert.PrimitiveConverters,
138139
org.scijava.ops.engine.stats.Mean,

scijava-ops-image/src/test/java/org/scijava/ops/image/OpRegressionTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ public class OpRegressionTest {
4242

4343
@Test
4444
public void opDiscoveryRegressionIT() {
45-
long expected = 1911;
45+
long expected = 1912;
4646
long actual = ops.infos().size();
4747
assertEquals(expected, actual);
4848
}

0 commit comments

Comments
 (0)
X Tutup