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(1659788114117494335)
	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{
		6172277127052188606,
		3265650857171344968,
		13730239218993256724,
		6843127655045710906}
	if !reflect.DeepEqual(hashSet, want) {
		t.Errorf(`Got %v, want %v.`, hashSet, want)
	}
}