From b4754030d1f5f088672db584d31dbedd33d16adf Mon Sep 17 00:00:00 2001 From: Timmy Welch Date: Sun, 12 Jan 2025 14:00:20 -0800 Subject: [PATCH] Fix tests --- go.mod | 2 +- hashcompute_test.go | 291 +++++++++++++++++++++++++------------------- imagehash_test.go | 106 +--------------- 3 files changed, 170 insertions(+), 229 deletions(-) diff --git a/go.mod b/go.mod index 6c672dd..c09ac0c 100644 --- a/go.mod +++ b/go.mod @@ -1,6 +1,6 @@ module gitea.narnian.us/lordwelch/goimagehash -go 1.21 +go 1.22 toolchain go1.22.0 diff --git a/hashcompute_test.go b/hashcompute_test.go index 8c8c1cc..ede249e 100644 --- a/hashcompute_test.go +++ b/hashcompute_test.go @@ -19,33 +19,33 @@ func TestHashCompute(t *testing.T) { name string distance int }{ - {"_examples/sample1.jpg", "_examples/sample1.jpg", AverageHash, "AverageHash", 0}, - {"_examples/sample2.jpg", "_examples/sample2.jpg", AverageHash, "AverageHash", 0}, - {"_examples/sample3.jpg", "_examples/sample3.jpg", AverageHash, "AverageHash", 0}, - {"_examples/sample4.jpg", "_examples/sample4.jpg", AverageHash, "AverageHash", 0}, - {"_examples/sample1.jpg", "_examples/sample2.jpg", AverageHash, "AverageHash", 40}, - {"_examples/sample1.jpg", "_examples/sample3.jpg", AverageHash, "AverageHash", 0}, - {"_examples/sample1.jpg", "_examples/sample4.jpg", AverageHash, "AverageHash", 34}, - {"_examples/sample2.jpg", "_examples/sample3.jpg", AverageHash, "AverageHash", 40}, - {"_examples/sample2.jpg", "_examples/sample4.jpg", AverageHash, "AverageHash", 6}, - {"_examples/sample1.jpg", "_examples/sample1.jpg", DifferenceHash, "DifferenceHash", 0}, - {"_examples/sample2.jpg", "_examples/sample2.jpg", DifferenceHash, "DifferenceHash", 0}, - {"_examples/sample3.jpg", "_examples/sample3.jpg", DifferenceHash, "DifferenceHash", 0}, - {"_examples/sample4.jpg", "_examples/sample4.jpg", DifferenceHash, "DifferenceHash", 0}, - {"_examples/sample1.jpg", "_examples/sample2.jpg", DifferenceHash, "DifferenceHash", 40}, - {"_examples/sample1.jpg", "_examples/sample3.jpg", DifferenceHash, "DifferenceHash", 2}, - {"_examples/sample1.jpg", "_examples/sample4.jpg", DifferenceHash, "DifferenceHash", 38}, - {"_examples/sample2.jpg", "_examples/sample3.jpg", DifferenceHash, "DifferenceHash", 42}, - {"_examples/sample2.jpg", "_examples/sample4.jpg", DifferenceHash, "DifferenceHash", 20}, - {"_examples/sample1.jpg", "_examples/sample1.jpg", PerceptionHash, "PerceptionHash", 0}, - {"_examples/sample2.jpg", "_examples/sample2.jpg", PerceptionHash, "PerceptionHash", 0}, - {"_examples/sample3.jpg", "_examples/sample3.jpg", PerceptionHash, "PerceptionHash", 0}, - {"_examples/sample4.jpg", "_examples/sample4.jpg", PerceptionHash, "PerceptionHash", 0}, - {"_examples/sample1.jpg", "_examples/sample2.jpg", PerceptionHash, "PerceptionHash", 34}, - {"_examples/sample1.jpg", "_examples/sample3.jpg", PerceptionHash, "PerceptionHash", 0}, - {"_examples/sample1.jpg", "_examples/sample4.jpg", PerceptionHash, "PerceptionHash", 30}, - {"_examples/sample2.jpg", "_examples/sample3.jpg", PerceptionHash, "PerceptionHash", 34}, - {"_examples/sample2.jpg", "_examples/sample4.jpg", PerceptionHash, "PerceptionHash", 20}, + {"_examples/images/sample1.jpg", "_examples/images/sample1.jpg", AverageHash, "AverageHash", 0}, + {"_examples/images/sample2.jpg", "_examples/images/sample2.jpg", AverageHash, "AverageHash", 0}, + {"_examples/images/sample3.jpg", "_examples/images/sample3.jpg", AverageHash, "AverageHash", 0}, + {"_examples/images/sample4.jpg", "_examples/images/sample4.jpg", AverageHash, "AverageHash", 0}, + {"_examples/images/sample1.jpg", "_examples/images/sample2.jpg", AverageHash, "AverageHash", 40}, + {"_examples/images/sample1.jpg", "_examples/images/sample3.jpg", AverageHash, "AverageHash", 0}, + {"_examples/images/sample1.jpg", "_examples/images/sample4.jpg", AverageHash, "AverageHash", 34}, + {"_examples/images/sample2.jpg", "_examples/images/sample3.jpg", AverageHash, "AverageHash", 40}, + {"_examples/images/sample2.jpg", "_examples/images/sample4.jpg", AverageHash, "AverageHash", 6}, + {"_examples/images/sample1.jpg", "_examples/images/sample1.jpg", DifferenceHash, "DifferenceHash", 0}, + {"_examples/images/sample2.jpg", "_examples/images/sample2.jpg", DifferenceHash, "DifferenceHash", 0}, + {"_examples/images/sample3.jpg", "_examples/images/sample3.jpg", DifferenceHash, "DifferenceHash", 0}, + {"_examples/images/sample4.jpg", "_examples/images/sample4.jpg", DifferenceHash, "DifferenceHash", 0}, + {"_examples/images/sample1.jpg", "_examples/images/sample2.jpg", DifferenceHash, "DifferenceHash", 40}, + {"_examples/images/sample1.jpg", "_examples/images/sample3.jpg", DifferenceHash, "DifferenceHash", 2}, + {"_examples/images/sample1.jpg", "_examples/images/sample4.jpg", DifferenceHash, "DifferenceHash", 38}, + {"_examples/images/sample2.jpg", "_examples/images/sample3.jpg", DifferenceHash, "DifferenceHash", 42}, + {"_examples/images/sample2.jpg", "_examples/images/sample4.jpg", DifferenceHash, "DifferenceHash", 20}, + {"_examples/images/sample1.jpg", "_examples/images/sample1.jpg", PerceptionHash, "PerceptionHash", 0}, + {"_examples/images/sample2.jpg", "_examples/images/sample2.jpg", PerceptionHash, "PerceptionHash", 0}, + {"_examples/images/sample3.jpg", "_examples/images/sample3.jpg", PerceptionHash, "PerceptionHash", 0}, + {"_examples/images/sample4.jpg", "_examples/images/sample4.jpg", PerceptionHash, "PerceptionHash", 0}, + {"_examples/images/sample1.jpg", "_examples/images/sample2.jpg", PerceptionHash, "PerceptionHash", 34}, + {"_examples/images/sample1.jpg", "_examples/images/sample3.jpg", PerceptionHash, "PerceptionHash", 0}, + {"_examples/images/sample1.jpg", "_examples/images/sample4.jpg", PerceptionHash, "PerceptionHash", 30}, + {"_examples/images/sample2.jpg", "_examples/images/sample3.jpg", PerceptionHash, "PerceptionHash", 34}, + {"_examples/images/sample2.jpg", "_examples/images/sample4.jpg", PerceptionHash, "PerceptionHash", 20}, } { file1, err := os.Open(tt.img1) if err != nil { @@ -124,7 +124,7 @@ func TestNilHashCompute(t *testing.T) { } func TestExtendHashCompute(t *testing.T) { - file, err := os.Open("_examples/sample1.jpg") + file, err := os.Open("_examples/images/sample1.jpg") if err != nil { t.Errorf("%s", err) } @@ -213,68 +213,68 @@ func BenchmarkDistanceDifferent(b *testing.B) { // name string // distance int // }{ -// {"_examples/sample1.jpg", "_examples/sample1.jpg", 8, 8, ExtAverageHash, "ExtAverageHash", 0}, -// {"_examples/sample2.jpg", "_examples/sample2.jpg", 8, 8, ExtAverageHash, "ExtAverageHash", 0}, -// {"_examples/sample3.jpg", "_examples/sample3.jpg", 8, 8, ExtAverageHash, "ExtAverageHash", 0}, -// {"_examples/sample4.jpg", "_examples/sample4.jpg", 8, 8, ExtAverageHash, "ExtAverageHash", 0}, -// {"_examples/sample1.jpg", "_examples/sample2.jpg", 8, 8, ExtAverageHash, "ExtAverageHash", 40}, -// {"_examples/sample1.jpg", "_examples/sample3.jpg", 8, 8, ExtAverageHash, "ExtAverageHash", 0}, -// {"_examples/sample1.jpg", "_examples/sample4.jpg", 8, 8, ExtAverageHash, "ExtAverageHash", 34}, -// {"_examples/sample2.jpg", "_examples/sample3.jpg", 8, 8, ExtAverageHash, "ExtAverageHash", 40}, -// {"_examples/sample2.jpg", "_examples/sample4.jpg", 8, 8, ExtAverageHash, "ExtAverageHash", 6}, -// {"_examples/sample1.jpg", "_examples/sample1.jpg", 16, 16, ExtAverageHash, "ExtAverageHash", 0}, -// {"_examples/sample2.jpg", "_examples/sample2.jpg", 16, 16, ExtAverageHash, "ExtAverageHash", 0}, -// {"_examples/sample3.jpg", "_examples/sample3.jpg", 16, 16, ExtAverageHash, "ExtAverageHash", 0}, -// {"_examples/sample4.jpg", "_examples/sample4.jpg", 16, 16, ExtAverageHash, "ExtAverageHash", 0}, -// {"_examples/sample1.jpg", "_examples/sample2.jpg", 16, 16, ExtAverageHash, "ExtAverageHash", 143}, -// {"_examples/sample1.jpg", "_examples/sample3.jpg", 16, 16, ExtAverageHash, "ExtAverageHash", 3}, -// {"_examples/sample1.jpg", "_examples/sample4.jpg", 16, 16, ExtAverageHash, "ExtAverageHash", 148}, -// {"_examples/sample2.jpg", "_examples/sample3.jpg", 16, 16, ExtAverageHash, "ExtAverageHash", 146}, -// {"_examples/sample2.jpg", "_examples/sample4.jpg", 16, 16, ExtAverageHash, "ExtAverageHash", 31}, -// {"_examples/sample1.jpg", "_examples/sample1.jpg", 17, 17, ExtAverageHash, "ExtAverageHash", 0}, -// {"_examples/sample2.jpg", "_examples/sample2.jpg", 17, 17, ExtAverageHash, "ExtAverageHash", 0}, -// {"_examples/sample3.jpg", "_examples/sample3.jpg", 17, 17, ExtAverageHash, "ExtAverageHash", 0}, -// {"_examples/sample4.jpg", "_examples/sample4.jpg", 17, 17, ExtAverageHash, "ExtAverageHash", 0}, -// {"_examples/sample1.jpg", "_examples/sample1.jpg", 8, 4, ExtPerceptionHash, "ExtPerceptionHash", 0}, -// {"_examples/sample2.jpg", "_examples/sample2.jpg", 8, 4, ExtPerceptionHash, "ExtPerceptionHash", 0}, -// {"_examples/sample3.jpg", "_examples/sample3.jpg", 8, 4, ExtPerceptionHash, "ExtPerceptionHash", 0}, -// {"_examples/sample4.jpg", "_examples/sample4.jpg", 8, 4, ExtPerceptionHash, "ExtPerceptionHash", 0}, -// {"_examples/sample1.jpg", "_examples/sample2.jpg", 8, 4, ExtPerceptionHash, "ExtPerceptionHash", 32}, -// {"_examples/sample1.jpg", "_examples/sample3.jpg", 8, 4, ExtPerceptionHash, "ExtPerceptionHash", 2}, -// {"_examples/sample1.jpg", "_examples/sample4.jpg", 8, 4, ExtPerceptionHash, "ExtPerceptionHash", 30}, -// {"_examples/sample2.jpg", "_examples/sample3.jpg", 8, 4, ExtPerceptionHash, "ExtPerceptionHash", 34}, -// {"_examples/sample2.jpg", "_examples/sample4.jpg", 8, 4, ExtPerceptionHash, "ExtPerceptionHash", 20}, -// {"_examples/sample1.jpg", "_examples/sample1.jpg", 16, 4, ExtPerceptionHash, "ExtPerceptionHash", 0}, -// {"_examples/sample2.jpg", "_examples/sample2.jpg", 16, 4, ExtPerceptionHash, "ExtPerceptionHash", 0}, -// {"_examples/sample3.jpg", "_examples/sample3.jpg", 16, 4, ExtPerceptionHash, "ExtPerceptionHash", 0}, -// {"_examples/sample4.jpg", "_examples/sample4.jpg", 16, 4, ExtPerceptionHash, "ExtPerceptionHash", 0}, -// {"_examples/sample1.jpg", "_examples/sample2.jpg", 16, 4, ExtPerceptionHash, "ExtPerceptionHash", 124}, -// {"_examples/sample1.jpg", "_examples/sample3.jpg", 16, 4, ExtPerceptionHash, "ExtPerceptionHash", 14}, -// {"_examples/sample1.jpg", "_examples/sample4.jpg", 16, 4, ExtPerceptionHash, "ExtPerceptionHash", 122}, -// {"_examples/sample2.jpg", "_examples/sample3.jpg", 16, 4, ExtPerceptionHash, "ExtPerceptionHash", 120}, -// {"_examples/sample2.jpg", "_examples/sample4.jpg", 16, 4, ExtPerceptionHash, "ExtPerceptionHash", 102}, -// {"_examples/sample1.jpg", "_examples/sample1.jpg", 8, 8, ExtDifferenceHash, "ExtDifferenceHash", 0}, -// {"_examples/sample2.jpg", "_examples/sample2.jpg", 8, 8, ExtDifferenceHash, "ExtDifferenceHash", 0}, -// {"_examples/sample3.jpg", "_examples/sample3.jpg", 8, 8, ExtDifferenceHash, "ExtDifferenceHash", 0}, -// {"_examples/sample4.jpg", "_examples/sample4.jpg", 8, 8, ExtDifferenceHash, "ExtDifferenceHash", 0}, -// {"_examples/sample1.jpg", "_examples/sample2.jpg", 8, 8, ExtDifferenceHash, "ExtDifferenceHash", 40}, -// {"_examples/sample1.jpg", "_examples/sample3.jpg", 8, 8, ExtDifferenceHash, "ExtDifferenceHash", 2}, -// {"_examples/sample1.jpg", "_examples/sample4.jpg", 8, 8, ExtDifferenceHash, "ExtDifferenceHash", 38}, -// {"_examples/sample2.jpg", "_examples/sample3.jpg", 8, 8, ExtDifferenceHash, "ExtDifferenceHash", 42}, -// {"_examples/sample2.jpg", "_examples/sample4.jpg", 8, 8, ExtDifferenceHash, "ExtDifferenceHash", 20}, -// {"_examples/sample1.jpg", "_examples/sample1.jpg", 16, 16, ExtDifferenceHash, "ExtDifferenceHash", 0}, -// {"_examples/sample2.jpg", "_examples/sample2.jpg", 16, 16, ExtDifferenceHash, "ExtDifferenceHash", 0}, -// {"_examples/sample3.jpg", "_examples/sample3.jpg", 16, 16, ExtDifferenceHash, "ExtDifferenceHash", 0}, -// {"_examples/sample4.jpg", "_examples/sample4.jpg", 16, 16, ExtDifferenceHash, "ExtDifferenceHash", 0}, -// {"_examples/sample1.jpg", "_examples/sample2.jpg", 16, 16, ExtDifferenceHash, "ExtDifferenceHash", 137}, -// {"_examples/sample1.jpg", "_examples/sample3.jpg", 16, 16, ExtDifferenceHash, "ExtDifferenceHash", 13}, -// {"_examples/sample1.jpg", "_examples/sample4.jpg", 16, 16, ExtDifferenceHash, "ExtDifferenceHash", 124}, -// {"_examples/sample2.jpg", "_examples/sample3.jpg", 16, 16, ExtDifferenceHash, "ExtDifferenceHash", 140}, -// {"_examples/sample2.jpg", "_examples/sample4.jpg", 16, 16, ExtDifferenceHash, "ExtDifferenceHash", 109}, -// {"_examples/sample1.jpg", "_examples/sample1.jpg", 17, 17, ExtDifferenceHash, "ExtDifferenceHash", 0}, -// {"_examples/sample2.jpg", "_examples/sample2.jpg", 17, 17, ExtDifferenceHash, "ExtDifferenceHash", 0}, -// {"_examples/sample3.jpg", "_examples/sample3.jpg", 17, 17, ExtDifferenceHash, "ExtDifferenceHash", 0}, -// {"_examples/sample4.jpg", "_examples/sample4.jpg", 17, 17, ExtDifferenceHash, "ExtDifferenceHash", 0}, +// {"_examples/images/sample1.jpg", "_examples/images/sample1.jpg", 8, 8, ExtAverageHash, "ExtAverageHash", 0}, +// {"_examples/images/sample2.jpg", "_examples/images/sample2.jpg", 8, 8, ExtAverageHash, "ExtAverageHash", 0}, +// {"_examples/images/sample3.jpg", "_examples/images/sample3.jpg", 8, 8, ExtAverageHash, "ExtAverageHash", 0}, +// {"_examples/images/sample4.jpg", "_examples/images/sample4.jpg", 8, 8, ExtAverageHash, "ExtAverageHash", 0}, +// {"_examples/images/sample1.jpg", "_examples/images/sample2.jpg", 8, 8, ExtAverageHash, "ExtAverageHash", 40}, +// {"_examples/images/sample1.jpg", "_examples/images/sample3.jpg", 8, 8, ExtAverageHash, "ExtAverageHash", 0}, +// {"_examples/images/sample1.jpg", "_examples/images/sample4.jpg", 8, 8, ExtAverageHash, "ExtAverageHash", 34}, +// {"_examples/images/sample2.jpg", "_examples/images/sample3.jpg", 8, 8, ExtAverageHash, "ExtAverageHash", 40}, +// {"_examples/images/sample2.jpg", "_examples/images/sample4.jpg", 8, 8, ExtAverageHash, "ExtAverageHash", 6}, +// {"_examples/images/sample1.jpg", "_examples/images/sample1.jpg", 16, 16, ExtAverageHash, "ExtAverageHash", 0}, +// {"_examples/images/sample2.jpg", "_examples/images/sample2.jpg", 16, 16, ExtAverageHash, "ExtAverageHash", 0}, +// {"_examples/images/sample3.jpg", "_examples/images/sample3.jpg", 16, 16, ExtAverageHash, "ExtAverageHash", 0}, +// {"_examples/images/sample4.jpg", "_examples/images/sample4.jpg", 16, 16, ExtAverageHash, "ExtAverageHash", 0}, +// {"_examples/images/sample1.jpg", "_examples/images/sample2.jpg", 16, 16, ExtAverageHash, "ExtAverageHash", 143}, +// {"_examples/images/sample1.jpg", "_examples/images/sample3.jpg", 16, 16, ExtAverageHash, "ExtAverageHash", 3}, +// {"_examples/images/sample1.jpg", "_examples/images/sample4.jpg", 16, 16, ExtAverageHash, "ExtAverageHash", 148}, +// {"_examples/images/sample2.jpg", "_examples/images/sample3.jpg", 16, 16, ExtAverageHash, "ExtAverageHash", 146}, +// {"_examples/images/sample2.jpg", "_examples/images/sample4.jpg", 16, 16, ExtAverageHash, "ExtAverageHash", 31}, +// {"_examples/images/sample1.jpg", "_examples/images/sample1.jpg", 17, 17, ExtAverageHash, "ExtAverageHash", 0}, +// {"_examples/images/sample2.jpg", "_examples/images/sample2.jpg", 17, 17, ExtAverageHash, "ExtAverageHash", 0}, +// {"_examples/images/sample3.jpg", "_examples/images/sample3.jpg", 17, 17, ExtAverageHash, "ExtAverageHash", 0}, +// {"_examples/images/sample4.jpg", "_examples/images/sample4.jpg", 17, 17, ExtAverageHash, "ExtAverageHash", 0}, +// {"_examples/images/sample1.jpg", "_examples/images/sample1.jpg", 8, 4, ExtPerceptionHash, "ExtPerceptionHash", 0}, +// {"_examples/images/sample2.jpg", "_examples/images/sample2.jpg", 8, 4, ExtPerceptionHash, "ExtPerceptionHash", 0}, +// {"_examples/images/sample3.jpg", "_examples/images/sample3.jpg", 8, 4, ExtPerceptionHash, "ExtPerceptionHash", 0}, +// {"_examples/images/sample4.jpg", "_examples/images/sample4.jpg", 8, 4, ExtPerceptionHash, "ExtPerceptionHash", 0}, +// {"_examples/images/sample1.jpg", "_examples/images/sample2.jpg", 8, 4, ExtPerceptionHash, "ExtPerceptionHash", 32}, +// {"_examples/images/sample1.jpg", "_examples/images/sample3.jpg", 8, 4, ExtPerceptionHash, "ExtPerceptionHash", 2}, +// {"_examples/images/sample1.jpg", "_examples/images/sample4.jpg", 8, 4, ExtPerceptionHash, "ExtPerceptionHash", 30}, +// {"_examples/images/sample2.jpg", "_examples/images/sample3.jpg", 8, 4, ExtPerceptionHash, "ExtPerceptionHash", 34}, +// {"_examples/images/sample2.jpg", "_examples/images/sample4.jpg", 8, 4, ExtPerceptionHash, "ExtPerceptionHash", 20}, +// {"_examples/images/sample1.jpg", "_examples/images/sample1.jpg", 16, 4, ExtPerceptionHash, "ExtPerceptionHash", 0}, +// {"_examples/images/sample2.jpg", "_examples/images/sample2.jpg", 16, 4, ExtPerceptionHash, "ExtPerceptionHash", 0}, +// {"_examples/images/sample3.jpg", "_examples/images/sample3.jpg", 16, 4, ExtPerceptionHash, "ExtPerceptionHash", 0}, +// {"_examples/images/sample4.jpg", "_examples/images/sample4.jpg", 16, 4, ExtPerceptionHash, "ExtPerceptionHash", 0}, +// {"_examples/images/sample1.jpg", "_examples/images/sample2.jpg", 16, 4, ExtPerceptionHash, "ExtPerceptionHash", 124}, +// {"_examples/images/sample1.jpg", "_examples/images/sample3.jpg", 16, 4, ExtPerceptionHash, "ExtPerceptionHash", 14}, +// {"_examples/images/sample1.jpg", "_examples/images/sample4.jpg", 16, 4, ExtPerceptionHash, "ExtPerceptionHash", 122}, +// {"_examples/images/sample2.jpg", "_examples/images/sample3.jpg", 16, 4, ExtPerceptionHash, "ExtPerceptionHash", 120}, +// {"_examples/images/sample2.jpg", "_examples/images/sample4.jpg", 16, 4, ExtPerceptionHash, "ExtPerceptionHash", 102}, +// {"_examples/images/sample1.jpg", "_examples/images/sample1.jpg", 8, 8, ExtDifferenceHash, "ExtDifferenceHash", 0}, +// {"_examples/images/sample2.jpg", "_examples/images/sample2.jpg", 8, 8, ExtDifferenceHash, "ExtDifferenceHash", 0}, +// {"_examples/images/sample3.jpg", "_examples/images/sample3.jpg", 8, 8, ExtDifferenceHash, "ExtDifferenceHash", 0}, +// {"_examples/images/sample4.jpg", "_examples/images/sample4.jpg", 8, 8, ExtDifferenceHash, "ExtDifferenceHash", 0}, +// {"_examples/images/sample1.jpg", "_examples/images/sample2.jpg", 8, 8, ExtDifferenceHash, "ExtDifferenceHash", 40}, +// {"_examples/images/sample1.jpg", "_examples/images/sample3.jpg", 8, 8, ExtDifferenceHash, "ExtDifferenceHash", 2}, +// {"_examples/images/sample1.jpg", "_examples/images/sample4.jpg", 8, 8, ExtDifferenceHash, "ExtDifferenceHash", 38}, +// {"_examples/images/sample2.jpg", "_examples/images/sample3.jpg", 8, 8, ExtDifferenceHash, "ExtDifferenceHash", 42}, +// {"_examples/images/sample2.jpg", "_examples/images/sample4.jpg", 8, 8, ExtDifferenceHash, "ExtDifferenceHash", 20}, +// {"_examples/images/sample1.jpg", "_examples/images/sample1.jpg", 16, 16, ExtDifferenceHash, "ExtDifferenceHash", 0}, +// {"_examples/images/sample2.jpg", "_examples/images/sample2.jpg", 16, 16, ExtDifferenceHash, "ExtDifferenceHash", 0}, +// {"_examples/images/sample3.jpg", "_examples/images/sample3.jpg", 16, 16, ExtDifferenceHash, "ExtDifferenceHash", 0}, +// {"_examples/images/sample4.jpg", "_examples/images/sample4.jpg", 16, 16, ExtDifferenceHash, "ExtDifferenceHash", 0}, +// {"_examples/images/sample1.jpg", "_examples/images/sample2.jpg", 16, 16, ExtDifferenceHash, "ExtDifferenceHash", 137}, +// {"_examples/images/sample1.jpg", "_examples/images/sample3.jpg", 16, 16, ExtDifferenceHash, "ExtDifferenceHash", 13}, +// {"_examples/images/sample1.jpg", "_examples/images/sample4.jpg", 16, 16, ExtDifferenceHash, "ExtDifferenceHash", 124}, +// {"_examples/images/sample2.jpg", "_examples/images/sample3.jpg", 16, 16, ExtDifferenceHash, "ExtDifferenceHash", 140}, +// {"_examples/images/sample2.jpg", "_examples/images/sample4.jpg", 16, 16, ExtDifferenceHash, "ExtDifferenceHash", 109}, +// {"_examples/images/sample1.jpg", "_examples/images/sample1.jpg", 17, 17, ExtDifferenceHash, "ExtDifferenceHash", 0}, +// {"_examples/images/sample2.jpg", "_examples/images/sample2.jpg", 17, 17, ExtDifferenceHash, "ExtDifferenceHash", 0}, +// {"_examples/images/sample3.jpg", "_examples/images/sample3.jpg", 17, 17, ExtDifferenceHash, "ExtDifferenceHash", 0}, +// {"_examples/images/sample4.jpg", "_examples/images/sample4.jpg", 17, 17, ExtDifferenceHash, "ExtDifferenceHash", 0}, // } { // file1, err := os.Open(tt.img1) // if err != nil { @@ -340,7 +340,7 @@ func BenchmarkExtImageHashDistanceDifferent(b *testing.B) { } func BenchmarkPerceptionHash(b *testing.B) { - file1, err := os.Open("_examples/sample3.jpg") + file1, err := os.Open("_examples/images/sample3.jpg") if err != nil { b.Errorf("%s", err) } @@ -350,45 +350,84 @@ func BenchmarkPerceptionHash(b *testing.B) { b.Errorf("%s", err) } for i := 0; i < b.N; i++ { - _, err := ExtPerceptionHash(img1, 8, 8) + _, err := PerceptionHash(img1) if err != nil { b.Errorf("%s", err) } } } -// func BenchmarkAverageHash(b *testing.B) { -// file1, err := os.Open("_examples/sample3.jpg") -// if err != nil { -// b.Errorf("%s", err) -// } -// defer file1.Close() -// img1, err := jpeg.Decode(file1) -// if err != nil { -// b.Errorf("%s", err) -// } -// for i := 0; i < b.N; i++ { -// _, err := ExtAverageHash(img1, 8, 8) -// if err != nil { -// b.Errorf("%s", err) -// } -// } -// } +func BenchmarkAverageHash(b *testing.B) { + file1, err := os.Open("_examples/images/sample3.jpg") + if err != nil { + b.Errorf("%s", err) + } + defer file1.Close() + img1, err := jpeg.Decode(file1) + if err != nil { + b.Errorf("%s", err) + } + for i := 0; i < b.N; i++ { + _, err := AverageHash(img1) + if err != nil { + b.Errorf("%s", err) + } + } +} -// func BenchmarkDifferenceHash(b *testing.B) { -// file1, err := os.Open("_examples/sample3.jpg") -// if err != nil { -// b.Errorf("%s", err) -// } -// defer file1.Close() -// img1, err := jpeg.Decode(file1) -// if err != nil { -// b.Errorf("%s", err) -// } -// for i := 0; i < b.N; i++ { -// _, err := ExtDifferenceHash(img1, 8, 8) -// if err != nil { -// b.Errorf("%s", err) -// } -// } -// } +func BenchmarkDifferenceHash(b *testing.B) { + file1, err := os.Open("_examples/images/sample3.jpg") + if err != nil { + b.Errorf("%s", err) + } + defer file1.Close() + img1, err := jpeg.Decode(file1) + if err != nil { + b.Errorf("%s", err) + } + for i := 0; i < b.N; i++ { + _, err := DifferenceHash(img1) + if err != nil { + b.Errorf("%s", err) + } + } +} + +func BenchmarkAllHash(b *testing.B) { + imagePaths := []string{ + "_examples/images/example.png", + "_examples/images/sample1.jpg", + "_examples/images/sample2.jpg", + "_examples/images/sample3.jpg", + "_examples/images/sample4.jpg", + } + images := []image.Image{} + for _, path := range imagePaths { + file1, err := os.Open(path) + if err != nil { + b.Errorf("%s", err) + } + defer file1.Close() + img, _, err := image.Decode(file1) + if err != nil { + b.Errorf("%s", err) + } + images = append(images, img) + } + for i := 0; i < b.N; i++ { + for _, image := range images { + _, err := AverageHash(image) + if err != nil { + b.Errorf("%s", err) + } + _, err = DifferenceHash(image) + if err != nil { + b.Errorf("%s", err) + } + _, err = PerceptionHash(image) + if err != nil { + b.Errorf("%s", err) + } + } + } +} diff --git a/imagehash_test.go b/imagehash_test.go index 19f9608..42beba6 100644 --- a/imagehash_test.go +++ b/imagehash_test.go @@ -11,8 +11,6 @@ import ( "image" _ "image/jpeg" "os" - "reflect" - "runtime" "testing" ) @@ -27,7 +25,7 @@ func TestNewImageHash(t *testing.T) { {[][]uint8{{1, 0, 1, 1}, {0, 0, 0, 0}}, Unknown, Unknown, 3, nil}, {[][]uint8{{0, 0, 0, 0}, {0, 0, 0, 0}}, Unknown, Unknown, 0, nil}, {[][]uint8{{0, 0, 0, 0}, {0, 0, 0, 1}}, Unknown, Unknown, 1, nil}, - {[][]uint8{{0, 0, 0, 0}, {0, 0, 0, 1}}, Unknown, AHash, -1, errors.New("Image hashes's kind should be identical")}, + {[][]uint8{{0, 0, 0, 0}, {0, 0, 0, 1}}, Unknown, AHash, -1, errors.New("image hashes's kind should be identical")}, } { data1 := tt.datas[0] data2 := tt.datas[1] @@ -51,7 +49,7 @@ func TestNewImageHash(t *testing.T) { t.Errorf("Distance between %v and %v expected as %d but got %d", data1, data2, tt.distance, dis) } if err != nil && err.Error() != tt.err.Error() { - t.Errorf("Expected err %s, actual %s", tt.err, err) + t.Errorf("Expected err %#v, actual %#v", tt.err, err) } } } @@ -67,109 +65,13 @@ func TestNil(t *testing.T) { } } -func TestSerialization(t *testing.T) { - checkErr := func(err error) { - if err != nil { - t.Errorf("%v", err) - } - } - - methods := []func(img image.Image) (*ImageHash, error){ - AverageHash, PerceptionHash, DifferenceHash, - } - extMethods := []func(img image.Image, width int, height int) (*ExtImageHash, error){ - // ExtAverageHash ExtPerceptionHash, , ExtDifferenceHash, - } - examples := []string{ - "_examples/sample1.jpg", "_examples/sample2.jpg", "_examples/sample3.jpg", "_examples/sample4.jpg", - } - - for _, ex := range examples { - file, err := os.Open(ex) - checkErr(err) - - defer file.Close() - - img, _, err := image.Decode(file) - checkErr(err) - - for _, method := range methods { - methodStr := runtime.FuncForPC(reflect.ValueOf(method).Pointer()).Name() - - hash, err := method(img) - checkErr(err) - - hex := hash.String() - // len(kind) == 1, len(":") == 1, len(hash) == 16 - if len(hex) != 18 { - t.Errorf("Got invalid hex string '%v'; %v of '%v'", hex, methodStr, ex) - } - - reHash, err := ImageHashFromString(hex) - checkErr(err) - - distance, err := hash.Distance(reHash) - checkErr(err) - - if distance != 0 { - t.Errorf("Original and unserialized objects should be identical, got distance=%v; %v of '%v'", distance, methodStr, ex) - } - } - - // test for ExtIExtImageHash - for _, extMethod := range extMethods { - extMethodStr := runtime.FuncForPC(reflect.ValueOf(extMethod).Pointer()).Name() - sizeList := []int{8, 16} - for _, size := range sizeList { - hash, err := extMethod(img, size, size) - checkErr(err) - - hex := hash.String() - // len(kind) == 1, len(":") == 1 - if len(hex) != size*size/4+2 { - t.Errorf("Got invalid hex string '%v'; %v of '%v'", hex, extMethodStr, ex) - } - - reHash, err := ExtImageHashFromString(hex) - checkErr(err) - - distance, err := hash.Distance(reHash) - checkErr(err) - - if distance != 0 { - t.Errorf("Original and unserialized objects should be identical, got distance=%v; %v of '%v'", distance, "ExtPerceptionHash", ex) - } - } - } - } - - // test for hashing empty string - imageHash, err := ImageHashFromString("") - if imageHash != nil { - t.Errorf("Expected reHash to be nil, got %v", imageHash) - } - if err == nil { - t.Errorf("Should got error for empty string") - } - extImageHash, err := ExtImageHashFromString("") - if extImageHash != nil { - t.Errorf("Expected reHash to be nil, got %v", extImageHash) - } - if err == nil { - t.Errorf("Should got error for empty string") - } - - // test for hashing invalid (non-hexadecimal) string - extImageHash, err = ExtImageHashFromString("k:g") -} - // func TestDifferentBitSizeHash(t *testing.T) { // checkErr := func(err error) { // if err != nil { // t.Errorf("%v", err) // } // } -// file, err := os.Open("_examples/sample1.jpg") +// file, err := os.Open("_examples/images/sample1.jpg") // checkErr(err) // defer file.Close() @@ -199,7 +101,7 @@ func TestDumpAndLoad(t *testing.T) { AverageHash, PerceptionHash, DifferenceHash, } examples := []string{ - "_examples/sample1.jpg", "_examples/sample2.jpg", "_examples/sample3.jpg", "_examples/sample4.jpg", + "_examples/images/sample1.jpg", "_examples/images/sample2.jpg", "_examples/images/sample3.jpg", "_examples/images/sample4.jpg", } for _, ex := range examples {