// Code generated by running "go generate". DO NOT EDIT. // Copyright 2017 The Wuffs Authors. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package check import ( a "github.com/google/wuffs/lang/ast" t "github.com/google/wuffs/lang/token" ) var reasons = [...]struct { s string r reason }{ {`"a < b: b > a"`, func(q *checker, n *a.Assert) error { op, xa, xb := parseBinaryOp(n.Condition()) if op != t.IDXBinaryLessThan { return errFailed } // b > a if err := proveReasonRequirement(q, t.IDXBinaryGreaterThan, xb, xa); err != nil { return err } _ = xa _ = xb return nil }}, {`"a < b: a < c; c < b"`, func(q *checker, n *a.Assert) error { op, xa, xb := parseBinaryOp(n.Condition()) if op != t.IDXBinaryLessThan { return errFailed } // a < c xc := argValue(q.tm, n.Args(), "c") if xc == nil { return errFailed } if err := proveReasonRequirement(q, t.IDXBinaryLessThan, xa, xc); err != nil { return err } // c < b if err := proveReasonRequirement(q, t.IDXBinaryLessThan, xc, xb); err != nil { return err } _ = xa _ = xb _ = xc return nil }}, {`"a < b: a < c; c == b"`, func(q *checker, n *a.Assert) error { op, xa, xb := parseBinaryOp(n.Condition()) if op != t.IDXBinaryLessThan { return errFailed } // a < c xc := argValue(q.tm, n.Args(), "c") if xc == nil { return errFailed } if err := proveReasonRequirement(q, t.IDXBinaryLessThan, xa, xc); err != nil { return err } // c == b if err := proveReasonRequirement(q, t.IDXBinaryEqEq, xc, xb); err != nil { return err } _ = xa _ = xb _ = xc return nil }}, {`"a < b: a == c; c < b"`, func(q *checker, n *a.Assert) error { op, xa, xb := parseBinaryOp(n.Condition()) if op != t.IDXBinaryLessThan { return errFailed } // a == c xc := argValue(q.tm, n.Args(), "c") if xc == nil { return errFailed } if err := proveReasonRequirement(q, t.IDXBinaryEqEq, xa, xc); err != nil { return err } // c < b if err := proveReasonRequirement(q, t.IDXBinaryLessThan, xc, xb); err != nil { return err } _ = xa _ = xb _ = xc return nil }}, {`"a < b: a < c; c <= b"`, func(q *checker, n *a.Assert) error { op, xa, xb := parseBinaryOp(n.Condition()) if op != t.IDXBinaryLessThan { return errFailed } // a < c xc := argValue(q.tm, n.Args(), "c") if xc == nil { return errFailed } if err := proveReasonRequirement(q, t.IDXBinaryLessThan, xa, xc); err != nil { return err } // c <= b if err := proveReasonRequirement(q, t.IDXBinaryLessEq, xc, xb); err != nil { return err } _ = xa _ = xb _ = xc return nil }}, {`"a < b: a <= c; c < b"`, func(q *checker, n *a.Assert) error { op, xa, xb := parseBinaryOp(n.Condition()) if op != t.IDXBinaryLessThan { return errFailed } // a <= c xc := argValue(q.tm, n.Args(), "c") if xc == nil { return errFailed } if err := proveReasonRequirement(q, t.IDXBinaryLessEq, xa, xc); err != nil { return err } // c < b if err := proveReasonRequirement(q, t.IDXBinaryLessThan, xc, xb); err != nil { return err } _ = xa _ = xb _ = xc return nil }}, {`"a > b: b < a"`, func(q *checker, n *a.Assert) error { op, xa, xb := parseBinaryOp(n.Condition()) if op != t.IDXBinaryGreaterThan { return errFailed } // b < a if err := proveReasonRequirement(q, t.IDXBinaryLessThan, xb, xa); err != nil { return err } _ = xa _ = xb return nil }}, {`"a <= b: b >= a"`, func(q *checker, n *a.Assert) error { op, xa, xb := parseBinaryOp(n.Condition()) if op != t.IDXBinaryLessEq { return errFailed } // b >= a if err := proveReasonRequirement(q, t.IDXBinaryGreaterEq, xb, xa); err != nil { return err } _ = xa _ = xb return nil }}, {`"a <= b: a <= c; c <= b"`, func(q *checker, n *a.Assert) error { op, xa, xb := parseBinaryOp(n.Condition()) if op != t.IDXBinaryLessEq { return errFailed } // a <= c xc := argValue(q.tm, n.Args(), "c") if xc == nil { return errFailed } if err := proveReasonRequirement(q, t.IDXBinaryLessEq, xa, xc); err != nil { return err } // c <= b if err := proveReasonRequirement(q, t.IDXBinaryLessEq, xc, xb); err != nil { return err } _ = xa _ = xb _ = xc return nil }}, {`"a <= b: a <= c; c == b"`, func(q *checker, n *a.Assert) error { op, xa, xb := parseBinaryOp(n.Condition()) if op != t.IDXBinaryLessEq { return errFailed } // a <= c xc := argValue(q.tm, n.Args(), "c") if xc == nil { return errFailed } if err := proveReasonRequirement(q, t.IDXBinaryLessEq, xa, xc); err != nil { return err } // c == b if err := proveReasonRequirement(q, t.IDXBinaryEqEq, xc, xb); err != nil { return err } _ = xa _ = xb _ = xc return nil }}, {`"a <= b: a == c; c <= b"`, func(q *checker, n *a.Assert) error { op, xa, xb := parseBinaryOp(n.Condition()) if op != t.IDXBinaryLessEq { return errFailed } // a == c xc := argValue(q.tm, n.Args(), "c") if xc == nil { return errFailed } if err := proveReasonRequirement(q, t.IDXBinaryEqEq, xa, xc); err != nil { return err } // c <= b if err := proveReasonRequirement(q, t.IDXBinaryLessEq, xc, xb); err != nil { return err } _ = xa _ = xb _ = xc return nil }}, {`"a >= b: b <= a"`, func(q *checker, n *a.Assert) error { op, xa, xb := parseBinaryOp(n.Condition()) if op != t.IDXBinaryGreaterEq { return errFailed } // b <= a if err := proveReasonRequirement(q, t.IDXBinaryLessEq, xb, xa); err != nil { return err } _ = xa _ = xb return nil }}, {`"a < (b + c): a < c; 0 <= b"`, func(q *checker, n *a.Assert) error { op, xa, t0 := parseBinaryOp(n.Condition()) if op != t.IDXBinaryLessThan { return errFailed } op, xb, xc := parseBinaryOp(t0) if op != t.IDXBinaryPlus { return errFailed } // a < c if err := proveReasonRequirement(q, t.IDXBinaryLessThan, xa, xc); err != nil { return err } // 0 <= b if err := proveReasonRequirement(q, t.IDXBinaryLessEq, zeroExpr, xb); err != nil { return err } _ = xa _ = xb _ = xc return nil }}, {`"a < (b + c): a < (b0 + c0); b0 <= b; c0 <= c"`, func(q *checker, n *a.Assert) error { op, xa, t0 := parseBinaryOp(n.Condition()) if op != t.IDXBinaryLessThan { return errFailed } op, xb, xc := parseBinaryOp(t0) if op != t.IDXBinaryPlus { return errFailed } // a < (b0 + c0) xb0 := argValue(q.tm, n.Args(), "b0") if xb0 == nil { return errFailed } xc0 := argValue(q.tm, n.Args(), "c0") if xc0 == nil { return errFailed } t1 := a.NewExpr(0, t.IDXBinaryPlus, 0, 0, xb0.AsNode(), nil, xc0.AsNode(), nil) if err := proveReasonRequirement(q, t.IDXBinaryLessThan, xa, t1); err != nil { return err } // b0 <= b if err := proveReasonRequirement(q, t.IDXBinaryLessEq, xb0, xb); err != nil { return err } // c0 <= c if err := proveReasonRequirement(q, t.IDXBinaryLessEq, xc0, xc); err != nil { return err } _ = xa _ = xb _ = xb0 _ = xc _ = xc0 return nil }}, {`"a <= (a + b): 0 <= b"`, func(q *checker, n *a.Assert) error { op, xa, t0 := parseBinaryOp(n.Condition()) if op != t.IDXBinaryLessEq { return errFailed } op, xa, xb := parseBinaryOp(t0) if op != t.IDXBinaryPlus { return errFailed } // 0 <= b if err := proveReasonRequirement(q, t.IDXBinaryLessEq, zeroExpr, xb); err != nil { return err } _ = xa _ = xb return nil }}, {`"(a + b) <= c: a <= (c - b)"`, func(q *checker, n *a.Assert) error { op, t0, xc := parseBinaryOp(n.Condition()) if op != t.IDXBinaryLessEq { return errFailed } op, xa, xb := parseBinaryOp(t0) if op != t.IDXBinaryPlus { return errFailed } // a <= (c - b) t1 := a.NewExpr(0, t.IDXBinaryMinus, 0, 0, xc.AsNode(), nil, xb.AsNode(), nil) if err := proveReasonRequirement(q, t.IDXBinaryLessEq, xa, t1); err != nil { return err } _ = xa _ = xb _ = xc return nil }}, }