Skip to content

Commit dcece7a

Browse files
Treiblesschorlectrueden
authored andcommitted
Add math op collection and test
1 parent a240a7c commit dcece7a

2 files changed

Lines changed: 128 additions & 0 deletions

File tree

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
package org.scijava.ops.math;
2+
3+
import java.util.function.BiFunction;
4+
import java.util.function.BinaryOperator;
5+
6+
import org.scijava.core.Priority;
7+
import org.scijava.ops.OpField;
8+
import org.scijava.ops.core.OpCollection;
9+
import org.scijava.param.Parameter;
10+
import org.scijava.plugin.Plugin;
11+
import org.scijava.struct.ItemIO;
12+
13+
// TODO: Derive parameters from the one abstract method of the functional interface in question.
14+
// This also will tell us the number of inputs vs. outputs. But!
15+
// It will NOT tell us if an argument is "BOTH".
16+
// And it will NOT tell us the preferred NAME of the argument.
17+
18+
@Plugin(type = OpCollection.class)
19+
public class MathOpCollection {
20+
21+
@OpField(names = "math.add", priority = Priority.LOW)
22+
@Parameter(key = "number1")
23+
@Parameter(key = "number2")
24+
@Parameter(key = "result", type = ItemIO.OUTPUT)
25+
public static final BiFunction<Double, Double, Double> addDoublesFunction = (x, y) -> x + y;
26+
27+
@OpField(names = "math.add", priority = Priority.HIGH)
28+
@Parameter(key = "number1")
29+
@Parameter(key = "number2")
30+
@Parameter(key = "result", type = ItemIO.OUTPUT)
31+
public static final BinaryOperator<Double> addDoublesOperator = (x, y) -> x + y;
32+
33+
@OpField(names = "math.sub")
34+
@Parameter(key = "number1")
35+
@Parameter(key = "number2")
36+
@Parameter(key = "result", type = ItemIO.OUTPUT)
37+
public static final BiFunction<Double, Double, Double> subDoublesFunction = (t, u) -> t - u;
38+
39+
@OpField(names = "math.mul")
40+
@Parameter(key = "number1")
41+
@Parameter(key = "number2")
42+
@Parameter(key = "result", type = ItemIO.OUTPUT)
43+
public static final BiFunction<Double, Double, Double> mulDoublesFunction = (t, u) -> t * u;
44+
45+
@OpField(names = "math.div")
46+
@Parameter(key = "number1")
47+
@Parameter(key = "number2")
48+
@Parameter(key = "result", type = ItemIO.OUTPUT)
49+
public static final BiFunction<Double, Double, Double> divDoublesFunction = (t, u) -> t / u;
50+
51+
}
Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
/*
2+
* #%L
3+
* SciJava Operations: a framework for reusable algorithms.
4+
* %%
5+
* Copyright (C) 2018 SciJava developers.
6+
* %%
7+
* Redistribution and use in source and binary forms, with or without
8+
* modification, are permitted provided that the following conditions are met:
9+
*
10+
* 1. Redistributions of source code must retain the above copyright notice,
11+
* this list of conditions and the following disclaimer.
12+
* 2. Redistributions in binary form must reproduce the above copyright notice,
13+
* this list of conditions and the following disclaimer in the documentation
14+
* and/or other materials provided with the distribution.
15+
*
16+
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
17+
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
18+
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
19+
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
20+
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
21+
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
22+
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
23+
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
24+
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
25+
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
26+
* POSSIBILITY OF SUCH DAMAGE.
27+
* #L%
28+
*/
29+
30+
package org.scijava.ops;
31+
32+
import java.util.function.BiFunction;
33+
34+
import org.junit.Test;
35+
import org.scijava.param.ValidityException;
36+
import org.scijava.ops.types.Nil;
37+
38+
public class OpCollectionTest extends AbstractTestEnvironment {
39+
40+
Nil<Double> nilDouble = new Nil<Double>() {
41+
};
42+
43+
@Test
44+
public void testOpCollection() throws ValidityException {
45+
BiFunction<Double, Double, Double> divFunction = ops().findOp( //
46+
"math.div", new Nil<BiFunction<Double, Double, Double>>() {
47+
}, //
48+
new Nil[] { nilDouble, nilDouble }, //
49+
nilDouble//
50+
);
51+
assert 1.0 == divFunction.apply(2.0, 2.0);
52+
53+
BiFunction<Double, Double, Double> addFunction = ops().findOp( //
54+
"math.add", new Nil<BiFunction<Double, Double, Double>>() {
55+
}, //
56+
new Nil[] { nilDouble, nilDouble }, //
57+
nilDouble//
58+
);
59+
assert 4.0 == addFunction.apply(2.0, 2.0);
60+
61+
BiFunction<Double, Double, Double> mulFunction = ops().findOp( //
62+
"math.mul", new Nil<BiFunction<Double, Double, Double>>() {
63+
}, //
64+
new Nil[] { nilDouble, nilDouble }, //
65+
nilDouble//
66+
);
67+
assert 4.0 == mulFunction.apply(2.0, 2.0);
68+
69+
BiFunction<Double, Double, Double> subFunction = ops().findOp( //
70+
"math.sub", new Nil<BiFunction<Double, Double, Double>>() {
71+
}, //
72+
new Nil[] { nilDouble, nilDouble }, //
73+
nilDouble//
74+
);
75+
assert 0.0 == subFunction.apply(2.0, 2.0);
76+
}
77+
}

0 commit comments

Comments
 (0)