Skip to content

Commit e5429ca

Browse files
Treiblesschorlegselzer
authored andcommitted
Add test for auto lift to array
1 parent 7ac1f3d commit e5429ca

2 files changed

Lines changed: 47 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: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,20 @@ public void autoFunctionToComputer() {
7070
}
7171

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

0 commit comments

Comments
 (0)