From 9f0a8395b31e30634296145219392770b2b0ffff Mon Sep 17 00:00:00 2001 From: Kevin Chabowski Date: Fri, 21 Mar 2014 14:50:06 +0100 Subject: Initial commit. Originally this was part of a larger, now discontinued, project. I chose to publish some parts of it that might be useful to others. --- hash_test.go | 92 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 92 insertions(+) create mode 100644 hash_test.go (limited to 'hash_test.go') diff --git a/hash_test.go b/hash_test.go new file mode 100644 index 0000000..0f915c9 --- /dev/null +++ b/hash_test.go @@ -0,0 +1,92 @@ +package buzhash + +import ( + "fmt" + "testing" +) + +// Test the rolling hash property of the buzhash +func TestRollingHash(t *testing.T) { + loremipsum1 := `Lorem ipsum dolor sit amet, consectetuer adipiscing elit. +Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus et +magnis dis parturient montes, nascetur ridiculus mus. Donec quam felis, +ultricies nec, pellentesque eu, pretium quis, sem. Nulla consequat massa quis +enim. Donec pede justo, fringilla vel, aliquet nec, vulputate eget, arcu. In +enim justo, rhoncus ut, imperdiet a, venenatis vitae, justo. Nullam dictum felis +eu pede mollis pretium. Integer tincidunt. Cras dapibus. Vivamus elementum +semper nisi. Aenean vulputate eleifend tellus. Aenean leo ligula, porttitor eu, +consequat vitae, eleifend ac, enim. Aliquam lorem ante, dapibus in, viverra +quis, feugiat a, tellus. Phasellus viverra nulla ut metus varius laoreet. +Quisque rutrum. Aenean imperdiet. Etiam ultricies nisi vel augue. Curabitur +ullamcorper ultricies nisi. Nam eget dui. + +Etiam rhoncus. Maecenas tempus, tellus eget condimentum rhoncus, sem quam semper +libero, sit amet adipiscing sem neque sed ipsum. Nam quam nunc, blandit vel, +luctus pulvinar, hendrerit id, lorem. Maecenas nec odio et ante tincidunt +tempus. Donec vitae sapien ut libero venenatis faucibus. Nullam quis ante. Etiam +sit amet orci eget eros faucibus tincidunt. Duis leo. Sed fringilla mauris sit +amet nibh. Donec sodales sagittis magna. Sed consequat, leo eget bibendum +sodales, augue velit cursus nunc, quis gravida magna mi a libero. Fusce +vulputate eleifend sapien. Vestibulum purus quam, scelerisque ut, mollis sed, +nonummy id, metus. Nullam accumsan lorem in dui. Cras ultricies mi eu turpis +hendrerit fringilla. Vestibulum ante ipsum primis in faucibus orci luctus et +ultrices posuere cubilia Curae; In ac dui quis mi consectetuer lacinia.` + + loremipsum2 := `Nam pretium turpis et arcu. Duis arcu tortor, suscipit eget, +imperdiet nec, imperdiet iaculis, ipsum. Sed aliquam ultrices mauris. Integer +ante arcu, accumsan a, consectetuer eget, posuere ut, mauris. Praesent +adipiscing. Phasellus ullamcorper ipsum rutrum nunc. Nunc nonummy metus. +Vestibulum volutpat pretium libero. Cras id dui. Aenean ut eros et nisl sagittis +vestibulum. Nullam nulla eros, ultricies sit amet, nonummy id, imperdiet +feugiat, pede. Sed lectus. Donec mollis hendrerit risus. Phasellus nec sem in +justo pellentesque facilisis. Etiam imperdiet imperdiet orci. Nunc nec neque. +Phasellus leo dolor, tempus non, auctor et, hendrerit quis, nisi. + +Curabitur ligula sapien, tincidunt non, euismod vitae, posuere imperdiet, leo. +Maecenas malesuada. Praesent congue erat at massa. Sed cursus turpis vitae +tortor. Donec posuere vulputate arcu. Phasellus accumsan cursus velit. +Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia +Curae; Sed aliquam, nisi quis porttitor congue, elit erat euismod orci, ac +placerat dolor lectus quis orci. Phasellus consectetuer vestibulum elit. Aenean +tellus metus, bibendum sed, posuere ac, mattis non, nunc. Vestibulum fringilla +pede sit amet augue. In turpis. Pellentesque posuere. Praesent turpis.` + + phrase1 := "Aenean massa. Cum sociis natoque" + phrase2 := "Phasellus leo dolor, tempus non, auctor et, hendrerit quis, nisi" + + hasher1 := NewBuzHash(32) + fmt.Fprint(hasher1, phrase1) + p1sum := hasher1.Sum32() + + hasher1.Reset() + found := false + for idx, b := range []byte(loremipsum1) { + ssum := hasher1.HashByte(b) + if (ssum == p1sum) && (idx-32 == 91) { + found = true + break + } + } + + if !found { + t.Errorf("Could not find '%s' by its checksum %08x.", phrase1, p1sum) + } + + hasher2 := NewBuzHash(64) + fmt.Fprint(hasher2, phrase2) + p2sum := hasher2.Sum32() + + hasher2.Reset() + found = false + for idx, b := range []byte(loremipsum2) { + ssum := hasher2.HashByte(b) + if (ssum == p2sum) && (idx-64 == 592) { + found = true + break + } + } + + if !found { + t.Errorf("Could not find '%s' by its checksum %08x.", phrase2, p2sum) + } +} -- cgit v1.2.3-54-g00ecf