From f47e5b3300dacc371ccc6f75eb717294a506e6af Mon Sep 17 00:00:00 2001 From: bloeys Date: Mon, 13 Jun 2022 01:36:04 +0400 Subject: [PATCH] Better isEqual bench --- .res/bench-is-equal-10-100-mil.png | Bin 0 -> 51637 bytes .res/bench-is-equal-10-million.png | Bin 26069 -> 0 bytes README.md | 5 +- nset_test.go | 106 +++++++++++++++++++++++++++++ 4 files changed, 109 insertions(+), 2 deletions(-) create mode 100755 .res/bench-is-equal-10-100-mil.png delete mode 100755 .res/bench-is-equal-10-million.png diff --git a/.res/bench-is-equal-10-100-mil.png b/.res/bench-is-equal-10-100-mil.png new file mode 100755 index 0000000000000000000000000000000000000000..355ac8078b3fd2aa04daac3b1b6abbd9fa49f013 GIT binary patch literal 51637 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�@MG#=o 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 Ta|-+`mQBVdP8~-Z*x&pgO_n`4 diff --git a/README.md b/README.md index 18bf6a7..99a0f86 100644 --- a/README.md +++ b/README.md @@ -140,8 +140,9 @@ Map benefits from sizing while NSet isn't affected, but in both cases NSet remai Another case where NSet really shines is checking if two sets are equal. Below is a benchmark that checks whether two NSets/maps with 10 Million elements in each are equal (They are equal, which is the worst case). -Here NSet finishes in `0.1ms` but Map takes almost a second with `813ms`. -![Benchmarking IsEq with 10,000,000 elements](./.res/bench-is-equal-10-million.png) +Here NSet finishes in `0.1ms` but Map takes almost a second with `813ms`. With a few large numbers NSet suffers a bit but then its performance remains or even improves with more elements, while map degrades greatly. + +![Benchmarking IsEq with 10 and 100 million elements](./.res/bench-is-equal-10-100-mil.png) Next we have `GetAllElements`, which simply returns an array of all the elements of NSet/Map (note this is dangerous in NSet. See [Memory characteristics](#memory-characteristics)). ![Benchmarking GetAllElements with 10,000,000 elements](.res/bench-getAllElements-10-million.png) diff --git a/nset_test.go b/nset_test.go index e8616a8..791bcda 100755 --- a/nset_test.go +++ b/nset_test.go @@ -447,6 +447,112 @@ func BenchmarkMapIsEq(b *testing.B) { } } +func BenchmarkNSetIsEqRand(b *testing.B) { + + b.StopTimer() + + rand.Seed(RandSeed) + s1 := nset.NewNSet[uint32]() + s2 := nset.NewNSet[uint32]() + for i := uint32(0); i < maxBenchSize; i++ { + r := rand.Uint32() + s1.Add(r) + s2.Add(r) + } + b.StartTimer() + + for i := 0; i < b.N; i++ { + s1.IsEq(s2) + } +} + +func BenchmarkMapIsEqRand(b *testing.B) { + + b.StopTimer() + + rand.Seed(RandSeed) + m1 := map[uint32]struct{}{} + m2 := map[uint32]struct{}{} + for i := uint32(0); i < maxBenchSize; i++ { + r := rand.Uint32() + m1[r] = struct{}{} + m2[r] = struct{}{} + } + b.StartTimer() + + mapsAreEq := func(m1, m2 map[uint32]struct{}) bool { + + if len(m1) != len(m2) { + return false + } + + for k := range m1 { + if _, ok := m2[k]; !ok { + return false + } + } + + return true + } + + for i := 0; i < b.N; i++ { + mapsAreEq(m1, m2) + } +} + +func BenchmarkNSetIsEqRand100Mil(b *testing.B) { + + b.StopTimer() + + rand.Seed(RandSeed) + s1 := nset.NewNSet[uint32]() + s2 := nset.NewNSet[uint32]() + for i := uint32(0); i < 100_000_000; i++ { + r := rand.Uint32() + s1.Add(r) + s2.Add(r) + } + b.StartTimer() + + for i := 0; i < b.N; i++ { + s1.IsEq(s2) + } +} + +func BenchmarkMapIsEqRand100Mil(b *testing.B) { + + b.StopTimer() + + rand.Seed(RandSeed) + m1 := map[uint32]struct{}{} + m2 := map[uint32]struct{}{} + for i := uint32(0); i < 100_000_000; i++ { + r := rand.Uint32() + m1[r] = struct{}{} + m2[r] = struct{}{} + } + b.StartTimer() + + mapsAreEq := func(m1, m2 map[uint32]struct{}) bool { + + if len(m1) != len(m2) { + return false + } + + for k := range m1 { + if _, ok := m2[k]; !ok { + return false + } + } + + return true + } + + for i := 0; i < b.N; i++ { + mapsAreEq(m1, m2) + } +} + var getIntersectionNset *nset.NSet[uint32] func BenchmarkNSetGetIntersection(b *testing.B) {