Closed vladvalkov closed 6 months ago
@vladvalkov - hey thanks for this! I forgot that this method was talked about as an improvement to mitigate allocations. Thanks for the holiday present!
LGTM =)
Nice win, thanks for the thorough benchmarking!
BenchmarkContainsComparison1Unsafe/Contains-12 61960590 19.25 ns/op 8 B/op 1 allocs/op
BenchmarkContainsComparison1Unsafe/Contains_slice-12 160231255 7.539 ns/op 0 B/op 0 allocs/op
BenchmarkContainsComparison1Unsafe/ContainsOne-12 221081941 5.431 ns/op 0 B/op 0 allocs/op
BenchmarkContainsComparison1Safe/Contains-12 38062934 31.10 ns/op 8 B/op 1 allocs/op
BenchmarkContainsComparison1Safe/Contains_slice-12 59746304 20.06 ns/op 0 B/op 0 allocs/op
BenchmarkContainsComparison1Safe/ContainsOne-12 72793695 16.53 ns/op 0 B/op 0 allocs/op
BenchmarkContainsComparison10Unsafe/Contains-12 5283321 219.6 ns/op 80 B/op 10 allocs/op
BenchmarkContainsComparison10Unsafe/Contains_slice-12 11263368 106.4 ns/op 0 B/op 0 allocs/op
BenchmarkContainsComparison10Unsafe/ContainsOne-12 14033839 85.38 ns/op 0 B/op 0 allocs/op
BenchmarkContainsComparison10Safe/Contains-12 3539056 334.7 ns/op 80 B/op 10 allocs/op
BenchmarkContainsComparison10Safe/Contains_slice-12 5102409 235.1 ns/op 0 B/op 0 allocs/op
BenchmarkContainsComparison10Safe/ContainsOne-12 6373026 188.0 ns/op 0 B/op 0 allocs/op
BenchmarkContainsComparison100Unsafe/Contains-12 405156 2643 ns/op 800 B/op 100 allocs/op
BenchmarkContainsComparison100Unsafe/Contains_slice-12 934239 1125 ns/op 0 B/op 0 allocs/op
BenchmarkContainsComparison100Unsafe/ContainsOne-12 1321592 908.6 ns/op 0 B/op 0 allocs/op
BenchmarkContainsComparison100Safe/Contains-12 329816 3508 ns/op 800 B/op 100 allocs/op
BenchmarkContainsComparison100Safe/Contains_slice-12 492885 2419 ns/op 0 B/op 0 allocs/op
BenchmarkContainsComparison100Safe/ContainsOne-12 618212 1949 ns/op 0 B/op 0 allocs/op
This PR solves issue #118 by adding
ContainsOne
method, which does not cause additional allocations. Also added some benchmarks to compare performance in different cases.