@Test
    public void testJoinOperators7() throws ParseException {
        Tensor x = evaluate("tensor(d0[2]):[3, 4]");
        Tensor y = evaluate("tensor(d0[2]):[1, 2]");
        assertEval("add", x, y, evaluate("tensor(d0[2]):[4, 6]"));
        assertEval("sub", x, y, evaluate("tensor(d0[2]):[2, 2]"));
        assertEval("mul", x, y, evaluate("tensor(d0[2]):[3, 8]"));
        assertEval("div", x, y, evaluate("tensor(d0[2]):[3, 2]"));
        assertEval("greater", x, y, evaluate("tensor(d0[2]):[1, 1]"));
        assertEval("less", x, y, evaluate("tensor(d0[2]):[0, 0]"));
        assertEval("equal", x, y, evaluate("tensor(d0[2]):[0, 0]"));
        assertEval("pow", x, y, evaluate("tensor(d0[2]):[3, 16]"));

        x = evaluate("random(d0[2],d1[3],d2[4]) + 1");
        y = evaluate("random(d0[2],d1[3],d2[4]) + 1");
        assertEval("add", x, y, evaluate("x + y", x, y));
        assertEval("sub", x, y, evaluate("x - y", x, y));
        assertEval("mul", x, y, evaluate("x * y", x, y));
        assertEval("div", x, y, evaluate("x / y", x, y));
        assertEval("greater", x, y, evaluate("join(x, y, f(a,b)(a > b))", x, y));
        assertEval("less", x, y, evaluate("join(x, y, f(a,b)(a < b))", x, y));
        assertEval("equal", x, y, evaluate("join(x, y, f(a,b)(a == b))", x, y));
        assertEval("pow", x, y, evaluate("join(x, y, f(a,b)(pow(a,b)))", x, y));

        // broadcasting
        x = evaluate("random(d0[2],d1[3],d2[4]) + 1");
        y = evaluate("random(d0[4]) + 1");
        assertEval("add", x, y, evaluate("x + rename(y, d0, d2)", x, y));
        assertEval("sub", x, y, evaluate("x - rename(y, d0, d2)", x, y));
        assertEval("mul", x, y, evaluate("x * rename(y, d0, d2)", x, y));
        assertEval("div", x, y, evaluate("x / rename(y, d0, d2)", x, y));
        assertEval("greater", x, y, evaluate("join(x, rename(y, d0, d2), f(a,b)(a > b))", x, y));
        assertEval("less", x, y, evaluate("join(x, rename(y, d0, d2), f(a,b)(a < b))", x, y));
        assertEval("equal", x, y, evaluate("join(x, rename(y, d0, d2), f(a,b)(a == b))", x, y));
        assertEval("pow", x, y, evaluate("join(x, rename(y, d0, d2), f(a,b)(pow(a,b)))", x, y));

        // broadcasting - opposite order
        x = evaluate("random(d0[4]) + 1");
        y = evaluate("random(d0[2],d1[3],d2[4]) + 1");
        assertEval("add", x, y, evaluate("rename(x, d0, d2) + y", x, y));
        assertEval("sub", x, y, evaluate("rename(x, d0, d2) - y", x, y));
        assertEval("mul", x, y, evaluate("rename(x, d0, d2) * y", x, y));
        assertEval("div", x, y, evaluate("rename(x, d0, d2) / y", x, y));
        assertEval("greater", x, y, evaluate("join(rename(x, d0, d2), y, f(a,b)(a > b))", x, y));
        assertEval("less", x, y, evaluate("join(rename(x, d0, d2), y, f(a,b)(a < b))", x, y));
        assertEval("equal", x, y, evaluate("join(rename(x, d0, d2), y, f(a,b)(a == b))", x, y));
        assertEval("pow", x, y, evaluate("join(rename(x, d0, d2), y, f(a,b)(pow(a,b)))", x, y));
    }
Unit tests for ONNX operators. The number on the test reflects the minimum
opset number for the operations tested.

@author lesters
model-integration/src/test/java/ai/vespa/rankingexpression/importer/onnx/OnnxOperationsTestCase.java