package hyper

import (
	"reflect"
	"testing"
)

func TestDecimalHash(t *testing.T) {
	cube := Cube{3, 2, 0, 1, 1, 4, 1, 0}
	hash := cube.DecimalHash()
	want := uint64(32011410)
	if hash != want {
		t.Errorf(`Got %v, want %v.`, hash, want)
	}
}

func TestFNV1aHash(t *testing.T) {
	cube := Cube{5, 59, 255, 9, 7, 12, 22, 31}
	hash := cube.FNV1aHash()
	want := uint64(6267598672213710911)
	if hash != want {
		t.Errorf(`Got %v, want %v.`, hash, want)
	}
}

func TestHashSet(t *testing.T) {
	cubes := Cubes{
		{0, 0, 7, 3, 0, 0, 9},
		{1, 0, 7, 3, 0, 0, 9},
		{0, 0, 8, 3, 0, 0, 9},
		{1, 0, 8, 3, 0, 0, 9}}
	hashSet := cubes.HashSet((Cube).FNV1aHash)
	want := []uint64{
		9211138565158515574,
		6304441926533466432,
		5296875461196147964,
		13706017245957046114}
	if !reflect.DeepEqual(hashSet, want) {
		t.Errorf(`Got %v, want %v.`, hashSet, want)
	}
}