| 44 | } |
| 45 | |
| 46 | func TestListContains(t *testing.T) { |
| 47 | tests := []struct { |
| 48 | listTerm ast.BaseTerm |
| 49 | memberTerm ast.BaseTerm |
| 50 | want ast.Constant |
| 51 | subst ast.Subst |
| 52 | }{ |
| 53 | {ast.List([]ast.Constant{ast.Number(10), ast.Number(11), ast.Number(2)}), ast.Number(2), ast.TrueConstant, ast.ConstSubstMap{}}, |
| 54 | {ast.ListNil, ast.Number(2), ast.FalseConstant, ast.ConstSubstMap{}}, |
| 55 | {ast.List([]ast.Constant{ast.Number(10)}), ast.Number(2), ast.FalseConstant, ast.ConstSubstMap{}}, |
| 56 | { |
| 57 | ast.List([]ast.Constant{ast.Number(10)}), ast.Variable{"X"}, ast.FalseConstant, |
| 58 | ast.ConstSubstMap{ast.Variable{"X"}: ast.Number(2)}, |
| 59 | }, |
| 60 | { |
| 61 | ast.List([]ast.Constant{ast.Number(2)}), ast.Variable{"X"}, ast.TrueConstant, |
| 62 | ast.ConstSubstMap{ast.Variable{"X"}: ast.Number(2)}, |
| 63 | }, |
| 64 | { |
| 65 | ast.Variable{"Y"}, |
| 66 | ast.Variable{"X"}, |
| 67 | ast.TrueConstant, |
| 68 | ast.ConstSubstMap{ |
| 69 | ast.Variable{"X"}: ast.Number(2), |
| 70 | ast.Variable{"Y"}: ast.List([]ast.Constant{ast.Number(2)}), |
| 71 | }, |
| 72 | }, |
| 73 | } |
| 74 | for _, test := range tests { |
| 75 | term := ast.ApplyFn{symbols.ListContains, []ast.BaseTerm{test.listTerm, test.memberTerm}} |
| 76 | got, err := EvalExpr(term, test.subst) |
| 77 | if err != nil { |
| 78 | t.Fatal(err) |
| 79 | } |
| 80 | if got != test.want { |
| 81 | t.Errorf("TestListContains(%v, %v)=%v want %v.", term, test.subst, got, test.want) |
| 82 | } |
| 83 | } |
| 84 | } |
| 85 | |
| 86 | func makeVarList(n int) []ast.Variable { |
| 87 | var vars []ast.Variable |