package gc

import "testing"

// Tests to make sure logic simplification rules are correct.

func TestLogic64(t *testing.T) {
	// test values to determine function equality
	values := [...]int64{-1 << 63, 1<<63 - 1, -4, -3, -2, -1, 0, 1, 2, 3, 4}

	// golden functions we use repeatedly
	zero := func(x int64) int64 { return 0 }
	id := func(x int64) int64 { return x }
	or := func(x, y int64) int64 { return x | y }
	and := func(x, y int64) int64 { return x & y }
	y := func(x, y int64) int64 { return y }

	for _, test := range [...]struct {
		name   string
		f      func(int64) int64
		golden func(int64) int64
	}{
		{"x|x", func(x int64) int64 { return x | x }, id},
		{"x|0", func(x int64) int64 { return x | 0 }, id},
		{"x|-1", func(x int64) int64 { return x | -1 }, func(x int64) int64 { return -1 }},
		{"x&x", func(x int64) int64 { return x & x }, id},
		{"x&0", func(x int64) int64 { return x & 0 }, zero},
		{"x&-1", func(x int64) int64 { return x & -1 }, id},
		{"x^x", func(x int64) int64 { return x ^ x }, zero},
		{"x^0", func(x int64) int64 { return x ^ 0 }, id},
		{"x^-1", func(x int64) int64 { return x ^ -1 }, func(x int64) int64 { return ^x }},
		{"x+0", func(x int64) int64 { return x + 0 }, id},
		{"x-x", func(x int64) int64 { return x - x }, zero},
		{"x*0", func(x int64) int64 { return x * 0 }, zero},
		{"^^x", func(x int64) int64 { return ^^x }, id},
	} {
		for _, v := range values {
			got := test.f(v)
			want := test.golden(v)
			if want != got {
				t.Errorf("[%s](%d)=%d, want %d", test.name, v, got, want)
			}
		}
	}
	for _, test := range [...]struct {
		name   string
		f      func(int64, int64) int64
		golden func(int64, int64) int64
	}{
		{"x|(x|y)", func(x, y int64) int64 { return x | (x | y) }, or},
		{"x|(y|x)", func(x, y int64) int64 { return x | (y | x) }, or},
		{"(x|y)|x", func(x, y int64) int64 { return (x | y) | x }, or},
		{"(y|x)|x", func(x, y int64) int64 { return (y | x) | x }, or},
		{"x&(x&y)", func(x, y int64) int64 { return x & (x & y) }, and},
		{"x&(y&x)", func(x, y int64) int64 { return x & (y & x) }, and},
		{"(x&y)&x", func(x, y int64) int64 { return (x & y) & x }, and},
		{"(y&x)&x", func(x, y int64) int64 { return (y & x) & x }, and},
		{"x^(x^y)", func(x, y int64) int64 { return x ^ (x ^ y) }, y},
		{"x^(y^x)", func(x, y int64) int64 { return x ^ (y ^ x) }, y},
		{"(x^y)^x", func(x, y int64) int64 { return (x ^ y) ^ x }, y},
		{"(y^x)^x", func(x, y int64) int64 { return (y ^ x) ^ x }, y},
		{"-(y-x)", func(x, y int64) int64 { return -(y - x) }, func(x, y int64) int64 { return x - y }},
		{"(x+y)-x", func(x, y int64) int64 { return (x + y) - x }, y},
		{"(y+x)-x", func(x, y int64) int64 { return (y + x) - x }, y},
	} {
		for _, v := range values {
			for _, w := range values {
				got := test.f(v, w)
				want := test.golden(v, w)
				if want != got {
					t.Errorf("[%s](%d,%d)=%d, want %d", test.name, v, w, got, want)
				}
			}
		}
	}
}

func TestLogic32(t *testing.T) {
	// test values to determine function equality
	values := [...]int32{-1 << 31, 1<<31 - 1, -4, -3, -2, -1, 0, 1, 2, 3, 4}

	// golden functions we use repeatedly
	zero := func(x int32) int32 { return 0 }
	id := func(x int32) int32 { return x }
	or := func(x, y int32) int32 { return x | y }
	and := func(x, y int32) int32 { return x & y }
	y := func(x, y int32) int32 { return y }

	for _, test := range [...]struct {
		name   string
		f      func(int32) int32
		golden func(int32) int32
	}{
		{"x|x", func(x int32) int32 { return x | x }, id},
		{"x|0", func(x int32) int32 { return x | 0 }, id},
		{"x|-1", func(x int32) int32 { return x | -1 }, func(x int32) int32 { return -1 }},
		{"x&x", func(x int32) int32 { return x & x }, id},
		{"x&0", func(x int32) int32 { return x & 0 }, zero},
		{"x&-1", func(x int32) int32 { return x & -1 }, id},
		{"x^x", func(x int32) int32 { return x ^ x }, zero},
		{"x^0", func(x int32) int32 { return x ^ 0 }, id},
		{"x^-1", func(x int32) int32 { return x ^ -1 }, func(x int32) int32 { return ^x }},
		{"x+0", func(x int32) int32 { return x + 0 }, id},
		{"x-x", func(x int32) int32 { return x - x }, zero},
		{"x*0", func(x int32) int32 { return x * 0 }, zero},
		{"^^x", func(x int32) int32 { return ^^x }, id},
	} {
		for _, v := range values {
			got := test.f(v)
			want := test.golden(v)
			if want != got {
				t.Errorf("[%s](%d)=%d, want %d", test.name, v, got, want)
			}
		}
	}
	for _, test := range [...]struct {
		name   string
		f      func(int32, int32) int32
		golden func(int32, int32) int32
	}{
		{"x|(x|y)", func(x, y int32) int32 { return x | (x | y) }, or},
		{"x|(y|x)", func(x, y int32) int32 { return x | (y | x) }, or},
		{"(x|y)|x", func(x, y int32) int32 { return (x | y) | x }, or},
		{"(y|x)|x", func(x, y int32) int32 { return (y | x) | x }, or},
		{"x&(x&y)", func(x, y int32) int32 { return x & (x & y) }, and},
		{"x&(y&x)", func(x, y int32) int32 { return x & (y & x) }, and},
		{"(x&y)&x", func(x, y int32) int32 { return (x & y) & x }, and},
		{"(y&x)&x", func(x, y int32) int32 { return (y & x) & x }, and},
		{"x^(x^y)", func(x, y int32) int32 { return x ^ (x ^ y) }, y},
		{"x^(y^x)", func(x, y int32) int32 { return x ^ (y ^ x) }, y},
		{"(x^y)^x", func(x, y int32) int32 { return (x ^ y) ^ x }, y},
		{"(y^x)^x", func(x, y int32) int32 { return (y ^ x) ^ x }, y},
		{"-(y-x)", func(x, y int32) int32 { return -(y - x) }, func(x, y int32) int32 { return x - y }},
		{"(x+y)-x", func(x, y int32) int32 { return (x + y) - x }, y},
		{"(y+x)-x", func(x, y int32) int32 { return (y + x) - x }, y},
	} {
		for _, v := range values {
			for _, w := range values {
				got := test.f(v, w)
				want := test.golden(v, w)
				if want != got {
					t.Errorf("[%s](%d,%d)=%d, want %d", test.name, v, w, got, want)
				}
			}
		}
	}
}

func TestLogic16(t *testing.T) {
	// test values to determine function equality
	values := [...]int16{-1 << 15, 1<<15 - 1, -4, -3, -2, -1, 0, 1, 2, 3, 4}

	// golden functions we use repeatedly
	zero := func(x int16) int16 { return 0 }
	id := func(x int16) int16 { return x }
	or := func(x, y int16) int16 { return x | y }
	and := func(x, y int16) int16 { return x & y }
	y := func(x, y int16) int16 { return y }

	for _, test := range [...]struct {
		name   string
		f      func(int16) int16
		golden func(int16) int16
	}{
		{"x|x", func(x int16) int16 { return x | x }, id},
		{"x|0", func(x int16) int16 { return x | 0 }, id},
		{"x|-1", func(x int16) int16 { return x | -1 }, func(x int16) int16 { return -1 }},
		{"x&x", func(x int16) int16 { return x & x }, id},
		{"x&0", func(x int16) int16 { return x & 0 }, zero},
		{"x&-1", func(x int16) int16 { return x & -1 }, id},
		{"x^x", func(x int16) int16 { return x ^ x }, zero},
		{"x^0", func(x int16) int16 { return x ^ 0 }, id},
		{"x^-1", func(x int16) int16 { return x ^ -1 }, func(x int16) int16 { return ^x }},
		{"x+0", func(x int16) int16 { return x + 0 }, id},
		{"x-x", func(x int16) int16 { return x - x }, zero},
		{"x*0", func(x int16) int16 { return x * 0 }, zero},
		{"^^x", func(x int16) int16 { return ^^x }, id},
	} {
		for _, v := range values {
			got := test.f(v)
			want := test.golden(v)
			if want != got {
				t.Errorf("[%s](%d)=%d, want %d", test.name, v, got, want)
			}
		}
	}
	for _, test := range [...]struct {
		name   string
		f      func(int16, int16) int16
		golden func(int16, int16) int16
	}{
		{"x|(x|y)", func(x, y int16) int16 { return x | (x | y) }, or},
		{"x|(y|x)", func(x, y int16) int16 { return x | (y | x) }, or},
		{"(x|y)|x", func(x, y int16) int16 { return (x | y) | x }, or},
		{"(y|x)|x", func(x, y int16) int16 { return (y | x) | x }, or},
		{"x&(x&y)", func(x, y int16) int16 { return x & (x & y) }, and},
		{"x&(y&x)", func(x, y int16) int16 { return x & (y & x) }, and},
		{"(x&y)&x", func(x, y int16) int16 { return (x & y) & x }, and},
		{"(y&x)&x", func(x, y int16) int16 { return (y & x) & x }, and},
		{"x^(x^y)", func(x, y int16) int16 { return x ^ (x ^ y) }, y},
		{"x^(y^x)", func(x, y int16) int16 { return x ^ (y ^ x) }, y},
		{"(x^y)^x", func(x, y int16) int16 { return (x ^ y) ^ x }, y},
		{"(y^x)^x", func(x, y int16) int16 { return (y ^ x) ^ x }, y},
		{"-(y-x)", func(x, y int16) int16 { return -(y - x) }, func(x, y int16) int16 { return x - y }},
		{"(x+y)-x", func(x, y int16) int16 { return (x + y) - x }, y},
		{"(y+x)-x", func(x, y int16) int16 { return (y + x) - x }, y},
	} {
		for _, v := range values {
			for _, w := range values {
				got := test.f(v, w)
				want := test.golden(v, w)
				if want != got {
					t.Errorf("[%s](%d,%d)=%d, want %d", test.name, v, w, got, want)
				}
			}
		}
	}
}

func TestLogic8(t *testing.T) {
	// test values to determine function equality
	values := [...]int8{-1 << 7, 1<<7 - 1, -4, -3, -2, -1, 0, 1, 2, 3, 4}

	// golden functions we use repeatedly
	zero := func(x int8) int8 { return 0 }
	id := func(x int8) int8 { return x }
	or := func(x, y int8) int8 { return x | y }
	and := func(x, y int8) int8 { return x & y }
	y := func(x, y int8) int8 { return y }

	for _, test := range [...]struct {
		name   string
		f      func(int8) int8
		golden func(int8) int8
	}{
		{"x|x", func(x int8) int8 { return x | x }, id},
		{"x|0", func(x int8) int8 { return x | 0 }, id},
		{"x|-1", func(x int8) int8 { return x | -1 }, func(x int8) int8 { return -1 }},
		{"x&x", func(x int8) int8 { return x & x }, id},
		{"x&0", func(x int8) int8 { return x & 0 }, zero},
		{"x&-1", func(x int8) int8 { return x & -1 }, id},
		{"x^x", func(x int8) int8 { return x ^ x }, zero},
		{"x^0", func(x int8) int8 { return x ^ 0 }, id},
		{"x^-1", func(x int8) int8 { return x ^ -1 }, func(x int8) int8 { return ^x }},
		{"x+0", func(x int8) int8 { return x + 0 }, id},
		{"x-x", func(x int8) int8 { return x - x }, zero},
		{"x*0", func(x int8) int8 { return x * 0 }, zero},
		{"^^x", func(x int8) int8 { return ^^x }, id},
	} {
		for _, v := range values {
			got := test.f(v)
			want := test.golden(v)
			if want != got {
				t.Errorf("[%s](%d)=%d, want %d", test.name, v, got, want)
			}
		}
	}
	for _, test := range [...]struct {
		name   string
		f      func(int8, int8) int8
		golden func(int8, int8) int8
	}{
		{"x|(x|y)", func(x, y int8) int8 { return x | (x | y) }, or},
		{"x|(y|x)", func(x, y int8) int8 { return x | (y | x) }, or},
		{"(x|y)|x", func(x, y int8) int8 { return (x | y) | x }, or},
		{"(y|x)|x", func(x, y int8) int8 { return (y | x) | x }, or},
		{"x&(x&y)", func(x, y int8) int8 { return x & (x & y) }, and},
		{"x&(y&x)", func(x, y int8) int8 { return x & (y & x) }, and},
		{"(x&y)&x", func(x, y int8) int8 { return (x & y) & x }, and},
		{"(y&x)&x", func(x, y int8) int8 { return (y & x) & x }, and},
		{"x^(x^y)", func(x, y int8) int8 { return x ^ (x ^ y) }, y},
		{"x^(y^x)", func(x, y int8) int8 { return x ^ (y ^ x) }, y},
		{"(x^y)^x", func(x, y int8) int8 { return (x ^ y) ^ x }, y},
		{"(y^x)^x", func(x, y int8) int8 { return (y ^ x) ^ x }, y},
		{"-(y-x)", func(x, y int8) int8 { return -(y - x) }, func(x, y int8) int8 { return x - y }},
		{"(x+y)-x", func(x, y int8) int8 { return (x + y) - x }, y},
		{"(y+x)-x", func(x, y int8) int8 { return (y + x) - x }, y},
	} {
		for _, v := range values {
			for _, w := range values {
				got := test.f(v, w)
				want := test.golden(v, w)
				if want != got {
					t.Errorf("[%s](%d,%d)=%d, want %d", test.name, v, w, got, want)
				}
			}
		}
	}
}
