Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -110,14 +110,25 @@ public Object function(final Object a, final Object b) {
}

// NB: Unknown function type.
return null;
throw new UnsupportedOperationException("function " + a + " was not found");
}

private static Object throwUnsupportedImplementation(final String op) {
throw new UnsupportedOperationException("Operation " + op + " is not implemented");
}
private static Object throwUnsupportedParameters(String op, Object a, Object b) {
throw new UnsupportedOperationException("Operation " + op + " did not complete with parameters A= [" + a + "] type " + type(a) + " B = [" + b + "] type " + type(b));
}
private static String type(Object o) {
return o == null ? "<null>" : o.getClass().getSimpleName();
}


// -- dot --

@Override
public Object dot(final Object a, final Object b) {
throw new UnsupportedOperationException();
return throwUnsupportedImplementation("dot");
}

// -- groups --
Expand All @@ -142,12 +153,12 @@ public Object braces(final Object... args) {

@Override
public Object transpose(final Object a) {
throw new UnsupportedOperationException();
return throwUnsupportedImplementation("transpose");
}

@Override
public Object dotTranspose(final Object a) {
throw new UnsupportedOperationException();
return throwUnsupportedImplementation("dotTranspose");
}

@Override
Expand All @@ -156,15 +167,15 @@ public Object pow(final Object a, final Object b) {
if (isD(av) && isD(bv)) return pow(d(av), d(bv));
if (isBI(av) && isI(bv)) return pow(bi(av), i(bv));
if (isBD(av) && isI(bv)) return pow(bd(av), i(bv));
return null;
return throwUnsupportedParameters("pow", av, bv);
}
public double pow(final double av, final double bv) { return Math.pow(av, bv); }
public BigInteger pow(final BigInteger av, final int bv) { return av.pow(bv); }
public BigDecimal pow(final BigDecimal av, final int bv) { return av.pow(bv); }

@Override
public Object dotPow(final Object a, final Object b) {
throw new UnsupportedOperationException();
return throwUnsupportedImplementation("dotPow");
}

// -- unary --
Expand Down Expand Up @@ -206,7 +217,7 @@ public Object complement(final Object a) {
final Object av = value(a);
if (isI(av)) return complement(i(av));
if (isL(av)) return complement(l(av));
return null;
return throwUnsupportedParameters("complement", av, null);
}
public int complement(final int a) { return ~a; }
public long complement(final long a) { return ~a; }
Expand All @@ -226,7 +237,7 @@ public Object mul(final Object a, final Object b) {
if (isD(av) && isD(bv)) return mul(d(av), d(bv));
if (isBI(av) && isBI(bv)) return mul(bi(av), bi(bv));
if (isBD(av) && isBD(bv)) return mul(bd(av), bd(bv));
return null;
return throwUnsupportedParameters("mul", av, bv);
}
public int mul(final int av, final int bv) { return av * bv; }
public long mul(final long av, final long bv) { return av * bv; }
Expand All @@ -248,7 +259,7 @@ public Object div(final Object a, final Object b) {
if (isD(av) && isD(bv)) return div(d(av), d(bv));
if (isBI(av) && isBI(bv)) return div(bi(av), bi(bv));
if (isBD(av) && isBD(bv)) return div(bd(av), bd(bv));
return null;
return throwUnsupportedParameters("div", av, bv);
}
public int div(final int av, final int bv) { return av / bv; }
public long div(final long av, final long bv) { return av / bv; }
Expand All @@ -270,7 +281,7 @@ public Object mod(final Object a, final Object b) {
if (isD(av) && isD(bv)) return mod(d(av), d(bv));
if (isBI(av) && isBI(bv)) return mod(bi(av), bi(bv));
if (isBD(av) && isBD(bv)) return mod(bd(av), bd(bv));
return null;
return throwUnsupportedParameters("mod", av, bv);
}
public int mod(final int av, final int bv) { return av % bv; }
public long mod(final long av, final long bv) { return av % bv; }
Expand All @@ -285,22 +296,22 @@ public BigDecimal mod(final BigDecimal av, final BigDecimal bv) {

@Override
public Object rightDiv(final Object a, final Object b) {
throw new UnsupportedOperationException();
return throwUnsupportedImplementation("rightDiv");
}

@Override
public Object dotMul(Object a, Object b) {
throw new UnsupportedOperationException();
return throwUnsupportedImplementation("dotMul");
}

@Override
public Object dotDiv(final Object a, final Object b) {
throw new UnsupportedOperationException();
return throwUnsupportedImplementation("dotDiv");
}

@Override
public Object dotRightDiv(final Object a, final Object b) {
throw new UnsupportedOperationException();
return throwUnsupportedImplementation("dotRightDiv");
}

// -- additive --
Expand All @@ -315,7 +326,7 @@ public Object add(final Object a, final Object b) {
if (isD(av) && isD(bv)) return add(d(av), d(bv));
if (isBI(av) && isBI(bv)) return add(bi(av), bi(bv));
if (isBD(av) && isBD(bv)) return add(bd(av), bd(bv));
return null;
return throwUnsupportedParameters("add", av, bv);
}
public String add(final String av, final String bv) { return av + bv; }
public int add(final int av, final int bv) { return av + bv; }
Expand All @@ -338,7 +349,7 @@ public Object sub(final Object a, final Object b) {
if (isD(av) && isD(bv)) return sub(d(av), d(bv));
if (isBI(av) && isBI(bv)) return sub(bi(av), bi(bv));
if (isBD(av) && isBD(bv)) return sub(bd(av), bd(bv));
return null;
return throwUnsupportedParameters("sub", av, bv);
}
public int sub(final int av, final int bv) { return av - bv; }
public long sub(final long av, final long bv) { return av - bv; }
Expand All @@ -359,7 +370,7 @@ public Object leftShift(final Object a, final Object b) {
if (isI(av) && isI(bv)) return leftShift(i(av), i(bv));
if (isL(av) && isL(bv)) return leftShift(l(av), l(bv));
if (isBI(av) && isI(bv)) return leftShift(bi(av), i(bv));
return null;
return throwUnsupportedParameters("leftShift", av, bv);
}
public int leftShift(final int av, final int bv) { return av << bv; }
public long leftShift(final long av, final long bv) { return av << bv; }
Expand All @@ -373,7 +384,7 @@ public Object rightShift(final Object a, final Object b) {
if (isI(av) && isI(bv)) return rightShift(i(av), i(bv));
if (isL(av) && isL(bv)) return rightShift(l(av), l(bv));
if (isBI(av) && isI(bv)) return rightShift(bi(av), i(bv));
return null;
return throwUnsupportedParameters("rightShift", av, bv);
}
public int rightShift(final int av, final int bv) { return av >> bv; }
public long rightShift(final long av, final long bv) { return av >> bv; }
Expand All @@ -386,7 +397,7 @@ public Object unsignedRightShift(final Object a, final Object b) {
final Object av = value(a), bv = value(b);
if (isI(av) && isI(bv)) return unsignedRightShift(i(av), i(bv));
if (isL(av) && isL(bv)) return unsignedRightShift(l(av), l(bv));
return null;
return throwUnsupportedParameters("unsignedRightShift", av, bv);
}
public int unsignedRightShift(final int av, final int bv) { return av >>> bv; }
public long unsignedRightShift(final long av, final long bv) { return av >>> bv; }
Expand All @@ -404,7 +415,7 @@ public Object lessThan(final Object a, final Object b) {
if (isD(av) && isD(bv)) return lessThan(d(av), d(bv));
if (isBI(av) && isBI(bv)) return lessThan(bi(av), bi(bv));
if (isBD(av) && isBD(bv)) return lessThan(bd(av), bd(bv));
return null;
return throwUnsupportedParameters("lessThan", av, bv);
}
public <T> boolean lessThan(final Comparable<T> av, final T bv) {
return av.compareTo(bv) < 0;
Expand All @@ -421,7 +432,7 @@ public Object greaterThan(final Object a, final Object b) {
if (isD(av) && isD(bv)) return greaterThan(d(av), d(bv));
if (isBI(av) && isBI(bv)) return greaterThan(bi(av), bi(bv));
if (isBD(av) && isBD(bv)) return greaterThan(bd(av), bd(bv));
return null;
return throwUnsupportedParameters("greaterThan", av, bv);
}
public <T> boolean greaterThan(final Comparable<T> av, final T bv) {
return av.compareTo(bv) > 0;
Expand All @@ -438,7 +449,7 @@ public Object lessThanOrEqual(final Object a, final Object b) {
if (isD(av) && isD(bv)) return lessThanOrEqual(d(av), d(bv));
if (isBI(av) && isBI(bv)) return lessThanOrEqual(bi(av), bi(bv));
if (isBD(av) && isBD(bv)) return lessThanOrEqual(bd(av), bd(bv));
return null;
return throwUnsupportedParameters("lessThanOrEqual", av, bv);
}
public <T> boolean lessThanOrEqual(final Comparable<T> av, final T bv) {
return av.compareTo(bv) <= 0;
Expand All @@ -455,15 +466,15 @@ public Object greaterThanOrEqual(final Object a, final Object b) {
if (isD(av) && isD(bv)) return greaterThanOrEqual(d(av), d(bv));
if (isBI(av) && isBI(bv)) return greaterThanOrEqual(bi(av), bi(bv));
if (isBD(av) && isBD(bv)) return greaterThanOrEqual(bd(av), bd(bv));
return null;
return throwUnsupportedParameters("greaterThanOrEqual", av, bv);
}
public <T> boolean greaterThanOrEqual(final Comparable<T> av, final T bv) {
return av.compareTo(bv) >= 0;
}

@Override
public Object instanceOf(final Object av, final Object bv) {
throw new UnsupportedOperationException();
return throwUnsupportedImplementation("instanceOf");
}

// -- equality --
Expand All @@ -486,7 +497,7 @@ public Object bitwiseAnd(final Object a, final Object b) {
if (isI(av) && isI(bv)) return bitwiseAnd(i(av), i(bv));
if (isL(av) && isL(bv)) return bitwiseAnd(l(av), l(bv));
if (isBI(av) && isBI(bv)) return bitwiseAnd(bi(av), bi(bv));
return null;
return throwUnsupportedParameters("bitwiseAnd", av, bv);
}
public int bitwiseAnd(final int av, final int bv) { return av & bv; }
public long bitwiseAnd(final long av, final long bv) { return av & bv; }
Expand All @@ -500,7 +511,7 @@ public Object bitwiseOr(final Object a, final Object b) {
if (isI(av) && isI(bv)) return bitwiseOr(i(av), i(bv));
if (isL(av) && isL(bv)) return bitwiseOr(l(av), l(bv));
if (isBI(av) && isBI(bv)) return bitwiseOr(bi(av), bi(bv));
return null;
return throwUnsupportedParameters("bitwiseOr", av, bv);
}
public int bitwiseOr(final int av, final int bv) { return av | bv; }
public long bitwiseOr(final long av, final long bv) { return av | bv; }
Expand All @@ -514,28 +525,28 @@ public BigInteger bitwiseOr(final BigInteger av, final BigInteger bv) {
public Object logicalAnd(final Object a, final Object b) {
final Object av = value(a), bv = value(b);
if (isBool(av) && isBool(bv)) return logicalAnd(bool(av), bool(bv));
return null;
return throwUnsupportedParameters("logicalAnd", av, bv);
}
public boolean logicalAnd(final boolean av, final boolean bv) { return av && bv; }

@Override
public Object logicalOr(final Object a, final Object b) {
final Object av = value(a), bv = value(b);
if (isBool(av) && isBool(bv)) return logicalOr(bool(av), bool(bv));
return null;
return throwUnsupportedParameters("logicalOr", av, bv);
}
public boolean logicalOr(final boolean av, final boolean bv) { return av || bv; }

// -- ternary --

@Override
public Object question(final Object a, final Object b) {
throw new UnsupportedOperationException();
return throwUnsupportedImplementation("question");
}

@Override
public Object colon(Object a, Object b) {
throw new UnsupportedOperationException();
return throwUnsupportedImplementation("colon");
}

// -- Helper methods - type matching --
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,6 @@
package org.scijava.parsington.eval;

import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNull;
import static org.junit.jupiter.api.Assertions.assertSame;
import static org.junit.jupiter.api.Assertions.assertThrows;
import static org.junit.jupiter.api.Assertions.assertTrue;
Expand Down Expand Up @@ -109,7 +108,7 @@ public void testFunction() {
assertEquals("b", e.function(v, Arrays.asList(1)));
assertEquals("c", e.function(v, Arrays.asList(2)));

assertNull(e.function(o(0), o(1)));
assertThrows(UnsupportedOperationException.class, () ->e.function(o(0), o(1)));
}

// -- dot --
Expand Down
Loading