blob: 345a833a18bffad3c5dfd749389ebb5e530acc33 [file] [log] [blame]
// 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
}},
}