summaryrefslogtreecommitdiffstats
path: root/eval/src/tests/eval/node_types/node_types_test.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'eval/src/tests/eval/node_types/node_types_test.cpp')
-rw-r--r--eval/src/tests/eval/node_types/node_types_test.cpp84
1 files changed, 27 insertions, 57 deletions
diff --git a/eval/src/tests/eval/node_types/node_types_test.cpp b/eval/src/tests/eval/node_types/node_types_test.cpp
index ce01d3f78c0..c18470887b2 100644
--- a/eval/src/tests/eval/node_types/node_types_test.cpp
+++ b/eval/src/tests/eval/node_types/node_types_test.cpp
@@ -74,47 +74,31 @@ TEST("require that leaf constants have appropriate type") {
}
TEST("require that input parameters preserve their type") {
- TEST_DO(verify("any", "any"));
TEST_DO(verify("error", "error"));
TEST_DO(verify("double", "double"));
- TEST_DO(verify("tensor", "tensor"));
- TEST_DO(verify("tensor(x{},y[10],z[])", "tensor(x{},y[10],z[])"));
+ TEST_DO(verify("tensor", "double"));
+ TEST_DO(verify("tensor(x{},y[10],z[5])", "tensor(x{},y[10],z[5])"));
}
TEST("require that if resolves to the appropriate type") {
TEST_DO(verify("if(error,1,2)", "error"));
TEST_DO(verify("if(1,error,2)", "error"));
TEST_DO(verify("if(1,2,error)", "error"));
- TEST_DO(verify("if(any,1,2)", "double"));
TEST_DO(verify("if(double,1,2)", "double"));
- TEST_DO(verify("if(tensor,1,2)", "double"));
- TEST_DO(verify("if(double,tensor,tensor)", "tensor"));
- TEST_DO(verify("if(double,any,any)", "any"));
- TEST_DO(verify("if(double,tensor(a[2]),tensor(a[2]))", "tensor(a[2])"));
- TEST_DO(verify("if(double,tensor(a[2]),tensor(a[3]))", "tensor(a[])"));
- TEST_DO(verify("if(double,tensor(a[2]),tensor(a[]))", "tensor(a[])"));
- TEST_DO(verify("if(double,tensor(a[2]),tensor(a{}))", "tensor"));
+ TEST_DO(verify("if(tensor(x[10]),1,2)", "double"));
TEST_DO(verify("if(double,tensor(a{}),tensor(a{}))", "tensor(a{})"));
- TEST_DO(verify("if(double,tensor(a{}),tensor(b{}))", "tensor"));
- TEST_DO(verify("if(double,tensor(a{}),tensor)", "tensor"));
- TEST_DO(verify("if(double,tensor,tensor(a{}))", "tensor"));
- TEST_DO(verify("if(double,tensor,any)", "any"));
- TEST_DO(verify("if(double,any,tensor)", "any"));
- TEST_DO(verify("if(double,tensor,double)", "any"));
- TEST_DO(verify("if(double,double,tensor)", "any"));
- TEST_DO(verify("if(double,double,any)", "any"));
- TEST_DO(verify("if(double,any,double)", "any"));
+ TEST_DO(verify("if(double,tensor(a[2]),tensor(a[2]))", "tensor(a[2])"));
+ TEST_DO(verify("if(double,tensor(a[2]),tensor(a[3]))", "error"));
+ TEST_DO(verify("if(double,tensor(a[2]),tensor(a{}))", "error"));
+ TEST_DO(verify("if(double,tensor(a{}),tensor(b{}))", "error"));
+ TEST_DO(verify("if(double,tensor(a{}),double)", "error"));
}
TEST("require that reduce resolves correct type") {
TEST_DO(verify("reduce(error,sum)", "error"));
- TEST_DO(verify("reduce(tensor,sum)", "double"));
TEST_DO(verify("reduce(tensor(x{}),sum)", "double"));
TEST_DO(verify("reduce(double,sum)", "double"));
- TEST_DO(verify("reduce(any,sum)", "any"));
TEST_DO(verify("reduce(error,sum,x)", "error"));
- TEST_DO(verify("reduce(tensor,sum,x)", "any"));
- TEST_DO(verify("reduce(any,sum,x)", "any"));
TEST_DO(verify("reduce(double,sum,x)", "error"));
TEST_DO(verify("reduce(tensor(x{},y{},z{}),sum,y)", "tensor(x{},z{})"));
TEST_DO(verify("reduce(tensor(x{},y{},z{}),sum,x,z)", "tensor(y{})"));
@@ -125,18 +109,16 @@ TEST("require that reduce resolves correct type") {
TEST("require that rename resolves correct type") {
TEST_DO(verify("rename(error,x,y)", "error"));
- TEST_DO(verify("rename(tensor,x,y)", "any"));
TEST_DO(verify("rename(double,x,y)", "error"));
- TEST_DO(verify("rename(any,x,y)", "any"));
- TEST_DO(verify("rename(tensor(x{},y[],z[5]),a,b)", "error"));
- TEST_DO(verify("rename(tensor(x{},y[],z[5]),x,y)", "error"));
- TEST_DO(verify("rename(tensor(x{},y[],z[5]),x,x)", "tensor(x{},y[],z[5])"));
- TEST_DO(verify("rename(tensor(x{},y[],z[5]),x,w)", "tensor(w{},y[],z[5])"));
- TEST_DO(verify("rename(tensor(x{},y[],z[5]),y,w)", "tensor(x{},w[],z[5])"));
- TEST_DO(verify("rename(tensor(x{},y[],z[5]),z,w)", "tensor(x{},y[],w[5])"));
- TEST_DO(verify("rename(tensor(x{},y[],z[5]),(x,y,z),(z,y,x))", "tensor(z{},y[],x[5])"));
- TEST_DO(verify("rename(tensor(x{},y[],z[5]),(x,z),(z,x))", "tensor(z{},y[],x[5])"));
- TEST_DO(verify("rename(tensor(x{},y[],z[5]),(x,y,z),(a,b,c))", "tensor(a{},b[],c[5])"));
+ TEST_DO(verify("rename(tensor(x{},y[1],z[5]),a,b)", "error"));
+ TEST_DO(verify("rename(tensor(x{},y[1],z[5]),x,y)", "error"));
+ TEST_DO(verify("rename(tensor(x{},y[1],z[5]),x,x)", "tensor(x{},y[1],z[5])"));
+ TEST_DO(verify("rename(tensor(x{},y[1],z[5]),x,w)", "tensor(w{},y[1],z[5])"));
+ TEST_DO(verify("rename(tensor(x{},y[1],z[5]),y,w)", "tensor(x{},w[1],z[5])"));
+ TEST_DO(verify("rename(tensor(x{},y[1],z[5]),z,w)", "tensor(x{},y[1],w[5])"));
+ TEST_DO(verify("rename(tensor(x{},y[1],z[5]),(x,y,z),(z,y,x))", "tensor(z{},y[1],x[5])"));
+ TEST_DO(verify("rename(tensor(x{},y[1],z[5]),(x,z),(z,x))", "tensor(z{},y[1],x[5])"));
+ TEST_DO(verify("rename(tensor(x{},y[1],z[5]),(x,y,z),(a,b,c))", "tensor(a{},b[1],c[5])"));
}
vespalib::string strfmt(const char *pattern, const char *a) {
@@ -149,37 +131,24 @@ vespalib::string strfmt(const char *pattern, const char *a, const char *b) {
void verify_op1(const char *pattern) {
TEST_DO(verify(strfmt(pattern, "error"), "error"));
- TEST_DO(verify(strfmt(pattern, "any"), "any"));
TEST_DO(verify(strfmt(pattern, "double"), "double"));
- TEST_DO(verify(strfmt(pattern, "tensor"), "tensor"));
- TEST_DO(verify(strfmt(pattern, "tensor(x{},y[10],z[])"), "tensor(x{},y[10],z[])"));
+ TEST_DO(verify(strfmt(pattern, "tensor(x{},y[10],z[1])"), "tensor(x{},y[10],z[1])"));
}
void verify_op2(const char *pattern) {
TEST_DO(verify(strfmt(pattern, "error", "error"), "error"));
- TEST_DO(verify(strfmt(pattern, "any", "error"), "error"));
- TEST_DO(verify(strfmt(pattern, "error", "any"), "error"));
TEST_DO(verify(strfmt(pattern, "double", "error"), "error"));
TEST_DO(verify(strfmt(pattern, "error", "double"), "error"));
- TEST_DO(verify(strfmt(pattern, "tensor", "error"), "error"));
- TEST_DO(verify(strfmt(pattern, "error", "tensor"), "error"));
- TEST_DO(verify(strfmt(pattern, "any", "any"), "any"));
- TEST_DO(verify(strfmt(pattern, "any", "double"), "any"));
- TEST_DO(verify(strfmt(pattern, "double", "any"), "any"));
- TEST_DO(verify(strfmt(pattern, "any", "tensor"), "any"));
- TEST_DO(verify(strfmt(pattern, "tensor", "any"), "any"));
+ TEST_DO(verify(strfmt(pattern, "tensor(x{})", "error"), "error"));
+ TEST_DO(verify(strfmt(pattern, "error", "tensor(x{})"), "error"));
TEST_DO(verify(strfmt(pattern, "double", "double"), "double"));
- TEST_DO(verify(strfmt(pattern, "tensor", "double"), "tensor"));
- TEST_DO(verify(strfmt(pattern, "double", "tensor"), "tensor"));
TEST_DO(verify(strfmt(pattern, "tensor(x{})", "double"), "tensor(x{})"));
TEST_DO(verify(strfmt(pattern, "double", "tensor(x{})"), "tensor(x{})"));
- TEST_DO(verify(strfmt(pattern, "tensor", "tensor"), "any"));
TEST_DO(verify(strfmt(pattern, "tensor(x{})", "tensor(x{})"), "tensor(x{})"));
TEST_DO(verify(strfmt(pattern, "tensor(x{})", "tensor(y{})"), "tensor(x{},y{})"));
- TEST_DO(verify(strfmt(pattern, "tensor(x[3])", "tensor(x[5])"), "tensor(x[3])"));
- TEST_DO(verify(strfmt(pattern, "tensor(x[])", "tensor(x[5])"), "tensor(x[])"));
- TEST_DO(verify(strfmt(pattern, "tensor(x[5])", "tensor(x[3])"), "tensor(x[3])"));
- TEST_DO(verify(strfmt(pattern, "tensor(x[5])", "tensor(x[])"), "tensor(x[])"));
+ TEST_DO(verify(strfmt(pattern, "tensor(x[5])", "tensor(x[5])"), "tensor(x[5])"));
+ TEST_DO(verify(strfmt(pattern, "tensor(x[3])", "tensor(x[5])"), "error"));
+ TEST_DO(verify(strfmt(pattern, "tensor(x[5])", "tensor(x[3])"), "error"));
TEST_DO(verify(strfmt(pattern, "tensor(x{})", "tensor(x[5])"), "error"));
}
@@ -249,7 +218,8 @@ TEST("require that lambda tensor resolves correct type") {
TEST("require that tensor concat resolves correct type") {
TEST_DO(verify("concat(double,double,x)", "tensor(x[2])"));
TEST_DO(verify("concat(tensor(x[2]),tensor(x[3]),x)", "tensor(x[5])"));
- TEST_DO(verify("concat(tensor(x[2]),tensor(x[3]),y)", "tensor(x[2],y[2])"));
+ TEST_DO(verify("concat(tensor(x[2]),tensor(x[2]),y)", "tensor(x[2],y[2])"));
+ TEST_DO(verify("concat(tensor(x[2]),tensor(x[3]),y)", "error"));
TEST_DO(verify("concat(tensor(x[2]),tensor(x{}),x)", "error"));
TEST_DO(verify("concat(tensor(x[2]),tensor(y{}),x)", "tensor(x[3],y{})"));
}
@@ -258,7 +228,7 @@ TEST("require that double only expressions can be detected") {
Function plain_fun = Function::parse("1+2");
Function complex_fun = Function::parse("reduce(a,sum)");
NodeTypes plain_types(plain_fun, {});
- NodeTypes complex_types(complex_fun, {ValueType::tensor_type({})});
+ NodeTypes complex_types(complex_fun, {ValueType::tensor_type({{"x"}})});
EXPECT_TRUE(plain_types.get_type(plain_fun.root()).is_double());
EXPECT_TRUE(complex_types.get_type(complex_fun.root()).is_double());
EXPECT_TRUE(plain_types.all_types_are_double());
@@ -269,7 +239,7 @@ TEST("require that empty type repo works as expected") {
NodeTypes types;
Function function = Function::parse("1+2");
EXPECT_FALSE(function.has_error());
- EXPECT_TRUE(types.get_type(function.root()).is_any());
+ EXPECT_TRUE(types.get_type(function.root()).is_error());
EXPECT_FALSE(types.all_types_are_double());
}