Skip to content

Commit 4d6827b

Browse files
Treiblesschorlectrueden
authored andcommitted
Add test for auto lift to array
1 parent af212a9 commit 4d6827b

2 files changed

Lines changed: 46 additions & 0 deletions

File tree

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
package org.scijava.ops.transform.lift;
2+
3+
import java.lang.reflect.Array;
4+
import java.util.function.Function;
5+
6+
import org.scijava.ops.OpService;
7+
import org.scijava.ops.matcher.OpRef;
8+
import org.scijava.ops.transform.OpRefTransformUtils;
9+
import org.scijava.ops.transform.OpTransformer;
10+
import org.scijava.ops.util.Maps;
11+
import org.scijava.plugin.Plugin;
12+
import org.scijava.util.Types;
13+
14+
@Plugin(type = OpTransformer.class)
15+
public class LiftFunctionToArrayTransformer implements OpTransformer {
16+
17+
@Override
18+
public Object transform(OpService opService, OpRef targetRef, Object src) {
19+
Class<?> outRaw = Types.raw(getRefTransformingTo(targetRef).getOutTypes()[0]);
20+
return Maps.Functions.Arrays.liftBoth((Function) src, outRaw);
21+
}
22+
23+
@Override
24+
public OpRef getRefTransformingTo(OpRef toRef) {
25+
return OpRefTransformUtils.unliftTransform(toRef, Function.class, Array.class, new Integer[] {},
26+
new Integer[] { 0 }, new Integer[] { 0 });
27+
}
28+
29+
@Override
30+
public Class<?> srcClass() {
31+
return Function.class;
32+
}
33+
}

src/test/java/org/scijava/ops/AutoTransformTest.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,19 @@ public void autoFunctionToComputer() {
7070
}
7171

7272
@Test
73+
public void autoLiftFuncToArray() {
74+
Function<Double[], Double[]> power3ArraysFunc = ops().findOp( //
75+
"math.pow", new Nil<Function<Double[], Double[]>>() {
76+
}, //
77+
new Nil[] { Nil.of(Double[].class), Nil.of(double.class) }, //
78+
Nil.of(Double[].class), //
79+
3.0//
80+
);
81+
82+
Double[] result = power3ArraysFunc.apply(new Double[] { 1.0, 2.0, 3.0 });
83+
assert arrayEquals(Arrays.stream(result).mapToDouble(d -> d).toArray(), 1.0, 8.0, 27.0);
84+
}
85+
7386
public void autoCompToFuncAndLift() {
7487
Nil<List<double[]>> n = new Nil<List<double[]>>() {
7588
};

0 commit comments

Comments
 (0)