public Test negate(Test that) { switch (that) {  case False: return Test.True;  case True: return Test.False;  case Bool(boolean value): return Test.Bool(!value);  case And(Test test): return Test.Or(negate(test));  case Or(Test test): return Test.And(negate(test));  case Binary(int opcode, MSILType type): return Test.Binary(negate(opcode), type);  default: throw new ApplicationError(that.getClass().getName()); }
public Item.CondItem negate(Item item) { Item.CondItem cond = mkCond(item);  return items.CondItem(negate(cond.test), cond.success, cond.failure);
    public Test negate(Test that) {        switch (that) {        case False:            return Test.True;        case True:            return Test.False;        case Bool(boolean value):            return Test.Bool(!value);	case And(Test test):	    return Test.Or(negate(test));	    	case Or(Test test):	    return Test.And(negate(test));        case Binary(int opcode, MSILType type):            return Test.Binary(negate(opcode), type);        default:            throw new ApplicationError(that.getClass().getName());        }    }