package hashtools

import "testing"

func TestAll(t *testing.T) {

	testData := []byte("The quick brown fox jumps over the lazy dog. ")

	all := AsList()
	for _, hashTool := range all {

		// take detour in getting hash.Hash for testing
		hash, err := New(hashTool.Name)
		if err != nil {
			t.Fatalf("failed to get HashTool %s", hashTool.Name)
		}

		if hash.BlockSize() != hashTool.BlockSize {
			t.Errorf("hashTool %s is broken or reports invalid block size. Expected %d, got %d.", hashTool.Name, hashTool.BlockSize, hash.BlockSize())
		}

		_, err = hash.Write(testData)
		if err != nil {
			t.Errorf("hashTool %s failed to write: %s", hashTool.Name, err)
		}

		sum := hash.Sum(nil)
		if len(sum) != hashTool.DigestSize {
			t.Errorf("hashTool %s is broken or reports invalid digest size. Expected %d, got %d.", hashTool.Name, hashTool.DigestSize, len(sum))
		}

	}
}