tests = test [
        "test1" ~: "varPairs" ~: varPairs (newXor Even [Var 4, Var 3, Var 8])
                       ~=? [ ((Var 3, Var 4), newXor Even [Var 4, Var 3, Var 8]),
                             ((Var 4, Var 8), newXor Even [Var 4, Var 3, Var 8]),
                             ((Var 3, Var 8), newXor Even [Var 4, Var 3, Var 8]) ],
        "test2" ~: "xorPairGroups" ~:  
            xorPairGroups [newXor Even [Var 1, Var 2, Var 3],
                           newXor Odd [Var 1, Var 2, Var 4]]
                        ~=?  
                          [[((Var 1, Var 2), newXor Even [Var 1, Var 2, Var 3]),
                          ((Var 1, Var 2), newXor Odd [Var 1, Var 2, Var 4])],
                          [((Var 1, Var 3), newXor Even [Var 1, Var 2, Var 3])],
                          [((Var 1, Var 4), newXor Odd [Var 1, Var 2, Var 4])],
                          [((Var 2, Var 3), newXor Even [Var 1, Var 2, Var 3])],
                          [((Var 2, Var 4), newXor Odd [Var 1, Var 2, Var 4])]]
    ]
tests = test [
        "test1" ~: "varPairs" ~: varPairs (newXor Even [Var 4, Var 3, Var 8])
                       ~=? [ ((Var 3, Var 4), newXor Even [Var 4, Var 3, Var 8]),
                             ((Var 4, Var 8), newXor Even [Var 4, Var 3, Var 8]),
                             ((Var 3, Var 8), newXor Even [Var 4, Var 3, Var 8]) ],
        "test2" ~: "xorPairGroups" ~:  
            xorPairGroups [newXor Even [Var 1, Var 2, Var 3],
                           newXor Odd [Var 1, Var 2, Var 4]]
                        ~=?  
                          [[((Var 1, Var 2), newXor Even [Var 1, Var 2, Var 3]),
                          ((Var 1, Var 2), newXor Odd [Var 1, Var 2, Var 4])],
                          [((Var 1, Var 3), newXor Even [Var 1, Var 2, Var 3])],
                          [((Var 1, Var 4), newXor Odd [Var 1, Var 2, Var 4])],
                          [((Var 2, Var 3), newXor Even [Var 1, Var 2, Var 3])],
                          [((Var 2, Var 4), newXor Odd [Var 1, Var 2, Var 4])]]
    ]
tests = test [
        "test1" ~: "varPairs" ~: varPairs (newXor Even [Var 4, Var 3, Var 8])
                       ~=? [ ((Var 3, Var 4), newXor Even [Var 4, Var 3, Var 8]),
                             ((Var 4, Var 8), newXor Even [Var 4, Var 3, Var 8]),
                             ((Var 3, Var 8), newXor Even [Var 4, Var 3, Var 8]) ],
        "test2" ~: "xorPairGroups" ~:  
            xorPairGroups [newXor Even [Var 1, Var 2, Var 3],
                           newXor Odd [Var 1, Var 2, Var 4]]
                        ~=?  
                          [[((Var 1, Var 2), newXor Even [Var 1, Var 2, Var 3]),
                          ((Var 1, Var 2), newXor Odd [Var 1, Var 2, Var 4])],
                          [((Var 1, Var 3), newXor Even [Var 1, Var 2, Var 3])],
                          [((Var 1, Var 4), newXor Odd [Var 1, Var 2, Var 4])],
                          [((Var 2, Var 3), newXor Even [Var 1, Var 2, Var 3])],
                          [((Var 2, Var 4), newXor Odd [Var 1, Var 2, Var 4])]]
    ]