// Copyright 2020 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

// +build riscv64

package testbranch

import (
	"testing"
)

func testBEQZ(a int64) (r bool)
func testBGE(a, b int64) (r bool)
func testBGEU(a, b int64) (r bool)
func testBGEZ(a int64) (r bool)
func testBGT(a, b int64) (r bool)
func testBGTU(a, b int64) (r bool)
func testBGTZ(a int64) (r bool)
func testBLE(a, b int64) (r bool)
func testBLEU(a, b int64) (r bool)
func testBLEZ(a int64) (r bool)
func testBLT(a, b int64) (r bool)
func testBLTU(a, b int64) (r bool)
func testBLTZ(a int64) (r bool)
func testBNEZ(a int64) (r bool)

func testGoBGE(a, b int64) bool  { return a >= b }
func testGoBGEU(a, b int64) bool { return uint64(a) >= uint64(b) }
func testGoBGT(a, b int64) bool  { return a > b }
func testGoBGTU(a, b int64) bool { return uint64(a) > uint64(b) }
func testGoBLE(a, b int64) bool  { return a <= b }
func testGoBLEU(a, b int64) bool { return uint64(a) <= uint64(b) }
func testGoBLT(a, b int64) bool  { return a < b }
func testGoBLTZ(a, b int64) bool { return uint64(a) < uint64(b) }

func TestBranchCondition(t *testing.T) {
	tests := []struct {
		ins  string
		a    int64
		b    int64
		fn   func(a, b int64) bool
		goFn func(a, b int64) bool
		want bool
	}{
		{"BGE", 0, 1, testBGE, testGoBGE, false},
		{"BGE", 0, 0, testBGE, testGoBGE, true},
		{"BGE", 0, -1, testBGE, testGoBGE, true},
		{"BGE", -1, 0, testBGE, testGoBGE, false},
		{"BGE", 1, 0, testBGE, testGoBGE, true},
		{"BGEU", 0, 1, testBGEU, testGoBGEU, false},
		{"BGEU", 0, 0, testBGEU, testGoBGEU, true},
		{"BGEU", 0, -1, testBGEU, testGoBGEU, false},
		{"BGEU", -1, 0, testBGEU, testGoBGEU, true},
		{"BGEU", 1, 0, testBGEU, testGoBGEU, true},
		{"BGT", 0, 1, testBGT, testGoBGT, false},
		{"BGT", 0, 0, testBGT, testGoBGT, false},
		{"BGT", 0, -1, testBGT, testGoBGT, true},
		{"BGT", -1, 0, testBGT, testGoBGT, false},
		{"BGT", 1, 0, testBGT, testGoBGT, true},
		{"BGTU", 0, 1, testBGTU, testGoBGTU, false},
		{"BGTU", 0, 0, testBGTU, testGoBGTU, false},
		{"BGTU", 0, -1, testBGTU, testGoBGTU, false},
		{"BGTU", -1, 0, testBGTU, testGoBGTU, true},
		{"BGTU", 1, 0, testBGTU, testGoBGTU, true},
		{"BLE", 0, 1, testBLE, testGoBLE, true},
		{"BLE", 0, 0, testBLE, testGoBLE, true},
		{"BLE", 0, -1, testBLE, testGoBLE, false},
		{"BLE", -1, 0, testBLE, testGoBLE, true},
		{"BLE", 1, 0, testBLE, testGoBLE, false},
		{"BLEU", 0, 1, testBLEU, testGoBLEU, true},
		{"BLEU", 0, 0, testBLEU, testGoBLEU, true},
		{"BLEU", 0, -1, testBLEU, testGoBLEU, true},
		{"BLEU", -1, 0, testBLEU, testGoBLEU, false},
		{"BLEU", 1, 0, testBLEU, testGoBLEU, false},
		{"BLT", 0, 1, testBLT, testGoBLT, true},
		{"BLT", 0, 0, testBLT, testGoBLT, false},
		{"BLT", 0, -1, testBLT, testGoBLT, false},
		{"BLT", -1, 0, testBLT, testGoBLT, true},
		{"BLT", 1, 0, testBLT, testGoBLT, false},
		{"BLTU", 0, 1, testBLTU, testGoBLTU, true},
		{"BLTU", 0, 0, testBLTU, testGoBLTU, false},
		{"BLTU", 0, -1, testBLTU, testGoBLTU, true},
		{"BLTU", -1, 0, testBLTU, testGoBLTU, false},
		{"BLTU", 1, 0, testBLTU, testGoBLTU, false},
	}
	for _, test := range tests {
		t.Run(test.ins, func(t *testing.T) {
			if got := test.fn(test.a, test.b); got != test.want {
				t.Errorf("Assembly %v %v, %v = %v, want %v", test.ins, test.a, test.b, got, test.want)
			}
			if got := test.goFn(test.a, test.b); got != test.want {
				t.Errorf("Go %v %v, %v = %v, want %v", test.ins, test.a, test.b, got, test.want)
			}
		})
	}
}

func TestBranchZero(t *testing.T) {
	tests := []struct {
		ins  string
		a    int64
		fn   func(a int64) bool
		want bool
	}{
		{"BEQZ", -1, testBEQZ, false},
		{"BEQZ", 0, testBEQZ, true},
		{"BEQZ", 1, testBEQZ, false},
		{"BGEZ", -1, testBGEZ, false},
		{"BGEZ", 0, testBGEZ, true},
		{"BGEZ", 1, testBGEZ, true},
		{"BGTZ", -1, testBGTZ, false},
		{"BGTZ", 0, testBGTZ, false},
		{"BGTZ", 1, testBGTZ, true},
		{"BLEZ", -1, testBLEZ, true},
		{"BLEZ", 0, testBLEZ, true},
		{"BLEZ", 1, testBLEZ, false},
		{"BLTZ", -1, testBLTZ, true},
		{"BLTZ", 0, testBLTZ, false},
		{"BLTZ", 1, testBLTZ, false},
		{"BNEZ", -1, testBNEZ, true},
		{"BNEZ", 0, testBNEZ, false},
		{"BNEZ", 1, testBNEZ, true},
	}
	for _, test := range tests {
		t.Run(test.ins, func(t *testing.T) {
			if got := test.fn(test.a); got != test.want {
				t.Errorf("%v %v = %v, want %v", test.ins, test.a, got, test.want)
			}
		})
	}
}
