func TestCheckBinaryExprIntNeqBool(t *testing.T) {
	env := MakeSimpleEnv()
	expectCheckError(t, `4 != true`, env,
		`cannot convert true to type int`,
		`invalid operation: 4 != true (mismatched types int and bool)`,
	)
}
Test Int != Bool
package eval
import (
	"testing"
)
func TestCheckBinaryExprIntAddInt(t *testing.T) {
	env := MakeSimpleEnv()
	expectConst(t, `4 + 4`, env, NewConstInt64(4 + 4), ConstInt)
}
func TestCheckBinaryExprIntAddRune(t *testing.T) {
	env := MakeSimpleEnv()
	expectConst(t, `4 + '@'`, env, NewConstRune(4 + '@'), ConstRune)
}
func TestCheckBinaryExprIntAddFloat(t *testing.T) {
	env := MakeSimpleEnv()
	expectConst(t, `4 + 2.0`, env, NewConstFloat64(4 + 2.0), ConstFloat)
}
func TestCheckBinaryExprIntAddComplex(t *testing.T) {
	env := MakeSimpleEnv()
	expectConst(t, `4 + 8.0i`, env, NewConstComplex128(4 + 8.0i), ConstComplex)
}
func TestCheckBinaryExprIntAddBool(t *testing.T) {
	env := MakeSimpleEnv()
	expectCheckError(t, `4 + true`, env,
		`cannot convert true to type int`,
		`invalid operation: 4 + true (mismatched types int and bool)`,
	)
}
func TestCheckBinaryExprIntAddString(t *testing.T) {
	env := MakeSimpleEnv()
	expectCheckError(t, `4 + "abc"`, env,
		`cannot convert "abc" to type int`,
		`invalid operation: 4 + "abc" (mismatched types int and string)`,
	)
}
func TestCheckBinaryExprIntAddNil(t *testing.T) {
	env := MakeSimpleEnv()
	expectCheckError(t, `4 + nil`, env,
		`cannot convert nil to type int`,
		`invalid operation: 4 + nil (mismatched types int and <T>)`,
	)
}
func TestCheckBinaryExprIntSubInt(t *testing.T) {
	env := MakeSimpleEnv()
	expectConst(t, `4 - 4`, env, NewConstInt64(4 - 4), ConstInt)
}
func TestCheckBinaryExprIntSubRune(t *testing.T) {
	env := MakeSimpleEnv()
	expectConst(t, `4 - '@'`, env, NewConstRune(4 - '@'), ConstRune)
}
func TestCheckBinaryExprIntSubFloat(t *testing.T) {
	env := MakeSimpleEnv()
	expectConst(t, `4 - 2.0`, env, NewConstFloat64(4 - 2.0), ConstFloat)
}
func TestCheckBinaryExprIntSubComplex(t *testing.T) {
	env := MakeSimpleEnv()
	expectConst(t, `4 - 8.0i`, env, NewConstComplex128(4 - 8.0i), ConstComplex)
}
func TestCheckBinaryExprIntSubBool(t *testing.T) {
	env := MakeSimpleEnv()
	expectCheckError(t, `4 - true`, env,
		`cannot convert true to type int`,
		`invalid operation: 4 - true (mismatched types int and bool)`,
	)
}
func TestCheckBinaryExprIntSubString(t *testing.T) {
	env := MakeSimpleEnv()
	expectCheckError(t, `4 - "abc"`, env,
		`cannot convert "abc" to type int`,
		`invalid operation: 4 - "abc" (mismatched types int and string)`,
	)
}
func TestCheckBinaryExprIntSubNil(t *testing.T) {
	env := MakeSimpleEnv()
	expectCheckError(t, `4 - nil`, env,
		`cannot convert nil to type int`,
		`invalid operation: 4 - nil (mismatched types int and <T>)`,
	)
}
func TestCheckBinaryExprIntMulInt(t *testing.T) {
	env := MakeSimpleEnv()
	expectConst(t, `4 * 4`, env, NewConstInt64(4 * 4), ConstInt)
}
func TestCheckBinaryExprIntMulRune(t *testing.T) {
	env := MakeSimpleEnv()
	expectConst(t, `4 * '@'`, env, NewConstRune(4 * '@'), ConstRune)
}
func TestCheckBinaryExprIntMulFloat(t *testing.T) {
	env := MakeSimpleEnv()
	expectConst(t, `4 * 2.0`, env, NewConstFloat64(4 * 2.0), ConstFloat)
}
func TestCheckBinaryExprIntMulComplex(t *testing.T) {
	env := MakeSimpleEnv()
	expectConst(t, `4 * 8.0i`, env, NewConstComplex128(4 * 8.0i), ConstComplex)
}
func TestCheckBinaryExprIntMulBool(t *testing.T) {
	env := MakeSimpleEnv()
	expectCheckError(t, `4 * true`, env,
		`cannot convert true to type int`,
		`invalid operation: 4 * true (mismatched types int and bool)`,
	)
}
func TestCheckBinaryExprIntMulString(t *testing.T) {
	env := MakeSimpleEnv()
	expectCheckError(t, `4 * "abc"`, env,
		`cannot convert "abc" to type int`,
		`invalid operation: 4 * "abc" (mismatched types int and string)`,
	)
}
func TestCheckBinaryExprIntMulNil(t *testing.T) {
	env := MakeSimpleEnv()
	expectCheckError(t, `4 * nil`, env,
		`cannot convert nil to type int`,
		`invalid operation: 4 * nil (mismatched types int and <T>)`,
	)
}
func TestCheckBinaryExprIntQuoInt(t *testing.T) {
	env := MakeSimpleEnv()
	expectConst(t, `4 / 4`, env, NewConstInt64(4 / 4), ConstInt)
}
func TestCheckBinaryExprIntQuoRune(t *testing.T) {
	env := MakeSimpleEnv()
	expectConst(t, `4 / '@'`, env, NewConstRune(4 / '@'), ConstRune)
}
func TestCheckBinaryExprIntQuoFloat(t *testing.T) {
	env := MakeSimpleEnv()
	expectConst(t, `4 / 2.0`, env, NewConstFloat64(4 / 2.0), ConstFloat)
}
func TestCheckBinaryExprIntQuoComplex(t *testing.T) {
	env := MakeSimpleEnv()
	expectConst(t, `4 / 8.0i`, env, NewConstComplex128(4 / 8.0i), ConstComplex)
}
func TestCheckBinaryExprIntQuoBool(t *testing.T) {
	env := MakeSimpleEnv()
	expectCheckError(t, `4 / true`, env,
		`cannot convert true to type int`,
		`invalid operation: 4 / true (mismatched types int and bool)`,
	)
}
func TestCheckBinaryExprIntQuoString(t *testing.T) {
	env := MakeSimpleEnv()
	expectCheckError(t, `4 / "abc"`, env,
		`cannot convert "abc" to type int`,
		`invalid operation: 4 / "abc" (mismatched types int and string)`,
	)
}
func TestCheckBinaryExprIntQuoNil(t *testing.T) {
	env := MakeSimpleEnv()
	expectCheckError(t, `4 / nil`, env,
		`cannot convert nil to type int`,
		`invalid operation: 4 / nil (mismatched types int and <T>)`,
	)
}
func TestCheckBinaryExprIntRemInt(t *testing.T) {
	env := MakeSimpleEnv()
	expectConst(t, `4 % 4`, env, NewConstInt64(4 % 4), ConstInt)
}
func TestCheckBinaryExprIntRemRune(t *testing.T) {
	env := MakeSimpleEnv()
	expectConst(t, `4 % '@'`, env, NewConstRune(4 % '@'), ConstRune)
}
func TestCheckBinaryExprIntRemFloat(t *testing.T) {
	env := MakeSimpleEnv()
	expectCheckError(t, `4 % 2.0`, env,
		`illegal constant expression: floating-point % operation`,
	)
}
func TestCheckBinaryExprIntRemComplex(t *testing.T) {
	env := MakeSimpleEnv()
	expectCheckError(t, `4 % 8.0i`, env,
		`illegal constant expression: untyped number % untyped number`,
	)
}
func TestCheckBinaryExprIntRemBool(t *testing.T) {
	env := MakeSimpleEnv()
	expectCheckError(t, `4 % true`, env,
		`cannot convert true to type int`,
		`invalid operation: 4 % true (mismatched types int and bool)`,
	)
}
func TestCheckBinaryExprIntRemString(t *testing.T) {
	env := MakeSimpleEnv()
	expectCheckError(t, `4 % "abc"`, env,
		`cannot convert "abc" to type int`,
		`invalid operation: 4 % "abc" (mismatched types int and string)`,
	)
}
func TestCheckBinaryExprIntRemNil(t *testing.T) {
	env := MakeSimpleEnv()
	expectCheckError(t, `4 % nil`, env,
		`cannot convert nil to type int`,
		`invalid operation: 4 % nil (mismatched types int and <T>)`,
	)
}
func TestCheckBinaryExprIntAndInt(t *testing.T) {
	env := MakeSimpleEnv()
	expectConst(t, `4 & 4`, env, NewConstInt64(4 & 4), ConstInt)
}
func TestCheckBinaryExprIntAndRune(t *testing.T) {
	env := MakeSimpleEnv()
	expectConst(t, `4 & '@'`, env, NewConstRune(4 & '@'), ConstRune)
}
func TestCheckBinaryExprIntAndFloat(t *testing.T) {
	env := MakeSimpleEnv()
	expectCheckError(t, `4 & 2.0`, env,
		`illegal constant expression: untyped number & untyped number`,
	)
}
func TestCheckBinaryExprIntAndComplex(t *testing.T) {
	env := MakeSimpleEnv()
	expectCheckError(t, `4 & 8.0i`, env,
		`illegal constant expression: untyped number & untyped number`,
	)
}
func TestCheckBinaryExprIntAndBool(t *testing.T) {
	env := MakeSimpleEnv()
	expectCheckError(t, `4 & true`, env,
		`cannot convert true to type int`,
		`invalid operation: 4 & true (mismatched types int and bool)`,
	)
}
func TestCheckBinaryExprIntAndString(t *testing.T) {
	env := MakeSimpleEnv()
	expectCheckError(t, `4 & "abc"`, env,
		`cannot convert "abc" to type int`,
		`invalid operation: 4 & "abc" (mismatched types int and string)`,
	)
}
func TestCheckBinaryExprIntAndNil(t *testing.T) {
	env := MakeSimpleEnv()
	expectCheckError(t, `4 & nil`, env,
		`cannot convert nil to type int`,
		`invalid operation: 4 & nil (mismatched types int and <T>)`,
	)
}
func TestCheckBinaryExprIntOrInt(t *testing.T) {
	env := MakeSimpleEnv()
	expectConst(t, `4 | 4`, env, NewConstInt64(4 | 4), ConstInt)
}
func TestCheckBinaryExprIntOrRune(t *testing.T) {
	env := MakeSimpleEnv()
	expectConst(t, `4 | '@'`, env, NewConstRune(4 | '@'), ConstRune)
}
func TestCheckBinaryExprIntOrFloat(t *testing.T) {
	env := MakeSimpleEnv()
	expectCheckError(t, `4 | 2.0`, env,
		`illegal constant expression: untyped number | untyped number`,
	)
}
func TestCheckBinaryExprIntOrComplex(t *testing.T) {
	env := MakeSimpleEnv()
	expectCheckError(t, `4 | 8.0i`, env,
		`illegal constant expression: untyped number | untyped number`,
	)
}
func TestCheckBinaryExprIntOrBool(t *testing.T) {
	env := MakeSimpleEnv()
	expectCheckError(t, `4 | true`, env,
		`cannot convert true to type int`,
		`invalid operation: 4 | true (mismatched types int and bool)`,
	)
}
func TestCheckBinaryExprIntOrString(t *testing.T) {
	env := MakeSimpleEnv()
	expectCheckError(t, `4 | "abc"`, env,
		`cannot convert "abc" to type int`,
		`invalid operation: 4 | "abc" (mismatched types int and string)`,
	)
}
func TestCheckBinaryExprIntOrNil(t *testing.T) {
	env := MakeSimpleEnv()
	expectCheckError(t, `4 | nil`, env,
		`cannot convert nil to type int`,
		`invalid operation: 4 | nil (mismatched types int and <T>)`,
	)
}
func TestCheckBinaryExprIntXorInt(t *testing.T) {
	env := MakeSimpleEnv()
	expectConst(t, `4 ^ 4`, env, NewConstInt64(4 ^ 4), ConstInt)
}
func TestCheckBinaryExprIntXorRune(t *testing.T) {
	env := MakeSimpleEnv()
	expectConst(t, `4 ^ '@'`, env, NewConstRune(4 ^ '@'), ConstRune)
}
func TestCheckBinaryExprIntXorFloat(t *testing.T) {
	env := MakeSimpleEnv()
	expectCheckError(t, `4 ^ 2.0`, env,
		`illegal constant expression: untyped number ^ untyped number`,
	)
}
func TestCheckBinaryExprIntXorComplex(t *testing.T) {
	env := MakeSimpleEnv()
	expectCheckError(t, `4 ^ 8.0i`, env,
		`illegal constant expression: untyped number ^ untyped number`,
	)
}
func TestCheckBinaryExprIntXorBool(t *testing.T) {
	env := MakeSimpleEnv()
	expectCheckError(t, `4 ^ true`, env,
		`cannot convert true to type int`,
		`invalid operation: 4 ^ true (mismatched types int and bool)`,
	)
}
func TestCheckBinaryExprIntXorString(t *testing.T) {
	env := MakeSimpleEnv()
	expectCheckError(t, `4 ^ "abc"`, env,
		`cannot convert "abc" to type int`,
		`invalid operation: 4 ^ "abc" (mismatched types int and string)`,
	)
}
func TestCheckBinaryExprIntXorNil(t *testing.T) {
	env := MakeSimpleEnv()
	expectCheckError(t, `4 ^ nil`, env,
		`cannot convert nil to type int`,
		`invalid operation: 4 ^ nil (mismatched types int and <T>)`,
	)
}
func TestCheckBinaryExprIntAndNotInt(t *testing.T) {
	env := MakeSimpleEnv()
	expectConst(t, `4 &^ 4`, env, NewConstInt64(4 &^ 4), ConstInt)
}
func TestCheckBinaryExprIntAndNotRune(t *testing.T) {
	env := MakeSimpleEnv()
	expectConst(t, `4 &^ '@'`, env, NewConstRune(4 &^ '@'), ConstRune)
}
func TestCheckBinaryExprIntAndNotFloat(t *testing.T) {
	env := MakeSimpleEnv()
	expectCheckError(t, `4 &^ 2.0`, env,
		`illegal constant expression: untyped number &^ untyped number`,
	)
}
func TestCheckBinaryExprIntAndNotComplex(t *testing.T) {
	env := MakeSimpleEnv()
	expectCheckError(t, `4 &^ 8.0i`, env,
		`illegal constant expression: untyped number &^ untyped number`,
	)
}
func TestCheckBinaryExprIntAndNotBool(t *testing.T) {
	env := MakeSimpleEnv()
	expectCheckError(t, `4 &^ true`, env,
		`cannot convert true to type int`,
		`invalid operation: 4 &^ true (mismatched types int and bool)`,
	)
}
func TestCheckBinaryExprIntAndNotString(t *testing.T) {
	env := MakeSimpleEnv()
	expectCheckError(t, `4 &^ "abc"`, env,
		`cannot convert "abc" to type int`,
		`invalid operation: 4 &^ "abc" (mismatched types int and string)`,
	)
}
func TestCheckBinaryExprIntAndNotNil(t *testing.T) {
	env := MakeSimpleEnv()
	expectCheckError(t, `4 &^ nil`, env,
		`cannot convert nil to type int`,
		`invalid operation: 4 &^ nil (mismatched types int and <T>)`,
	)
}
func TestCheckBinaryExprIntEqlInt(t *testing.T) {
	env := MakeSimpleEnv()
	expectConst(t, `4 == 4`, env, (4 == 4), ConstBool)
}
func TestCheckBinaryExprIntEqlRune(t *testing.T) {
	env := MakeSimpleEnv()
	expectConst(t, `4 == '@'`, env, (4 == '@'), ConstBool)
}
func TestCheckBinaryExprIntEqlFloat(t *testing.T) {
	env := MakeSimpleEnv()
	expectConst(t, `4 == 2.0`, env, (4 == 2.0), ConstBool)
}
func TestCheckBinaryExprIntEqlComplex(t *testing.T) {
	env := MakeSimpleEnv()
	expectConst(t, `4 == 8.0i`, env, (4 == 8.0i), ConstBool)
}
func TestCheckBinaryExprIntEqlBool(t *testing.T) {
	env := MakeSimpleEnv()
	expectCheckError(t, `4 == true`, env,
		`cannot convert true to type int`,
		`invalid operation: 4 == true (mismatched types int and bool)`,
	)
}
func TestCheckBinaryExprIntEqlString(t *testing.T) {
	env := MakeSimpleEnv()
	expectCheckError(t, `4 == "abc"`, env,
		`cannot convert "abc" to type int`,
		`invalid operation: 4 == "abc" (mismatched types int and string)`,
	)
}
func TestCheckBinaryExprIntEqlNil(t *testing.T) {
	env := MakeSimpleEnv()
	expectCheckError(t, `4 == nil`, env,
		`cannot convert nil to type int`,
		`invalid operation: 4 == nil (mismatched types int and <T>)`,
	)
}
func TestCheckBinaryExprIntNeqInt(t *testing.T) {
	env := MakeSimpleEnv()
	expectConst(t, `4 != 4`, env, (4 != 4), ConstBool)
}
func TestCheckBinaryExprIntNeqRune(t *testing.T) {
	env := MakeSimpleEnv()
	expectConst(t, `4 != '@'`, env, (4 != '@'), ConstBool)
}
func TestCheckBinaryExprIntNeqFloat(t *testing.T) {
	env := MakeSimpleEnv()
	expectConst(t, `4 != 2.0`, env, (4 != 2.0), ConstBool)
}
func TestCheckBinaryExprIntNeqComplex(t *testing.T) {
	env := MakeSimpleEnv()
	expectConst(t, `4 != 8.0i`, env, (4 != 8.0i), ConstBool)
}