mirror of
https://github.com/vlang/v.git
synced 2023-08-10 21:13:21 +03:00
map: use hashmap instead of b-tree
This commit is contained in:
@ -1,112 +0,0 @@
|
||||
import rand
|
||||
import time
|
||||
import builtin.hashmap
|
||||
|
||||
fn hashmap_set_bench(arr []string, repeat int) {
|
||||
start_time := time.ticks()
|
||||
for _ in 0..repeat {
|
||||
mut b := hashmap.new_hashmap()
|
||||
for x in arr {
|
||||
b.set(x, 1)
|
||||
}
|
||||
}
|
||||
end_time := time.ticks() - start_time
|
||||
println("* hashmap_set: ${end_time} ms")
|
||||
}
|
||||
|
||||
fn map_set_bench(arr []string, repeat int) {
|
||||
start_time := time.ticks()
|
||||
for _ in 0..repeat {
|
||||
mut b := map[string]int
|
||||
for x in arr {
|
||||
b[x] = 1
|
||||
}
|
||||
}
|
||||
end_time := time.ticks() - start_time
|
||||
println("* map_set: ${end_time} ms")
|
||||
}
|
||||
|
||||
fn hashmap_get_bench(arr []string, repeat int) {
|
||||
mut b := hashmap.new_hashmap()
|
||||
for x in arr {
|
||||
b.set(x, 1)
|
||||
}
|
||||
start_time := time.ticks()
|
||||
for _ in 0..repeat {
|
||||
for x in arr {
|
||||
b.get(x)
|
||||
}
|
||||
}
|
||||
end_time := time.ticks() - start_time
|
||||
println("* hashmap_get: ${end_time} ms")
|
||||
}
|
||||
|
||||
fn map_get_bench(arr []string, repeat int) {
|
||||
mut b := map[string]int
|
||||
for x in arr {
|
||||
b[x] = 1
|
||||
}
|
||||
start_time := time.ticks()
|
||||
for _ in 0..repeat {
|
||||
for x in arr {
|
||||
b[x]
|
||||
}
|
||||
}
|
||||
end_time := time.ticks() - start_time
|
||||
println("* map_get: ${end_time} ms")
|
||||
}
|
||||
|
||||
fn benchmark_many_keys() {
|
||||
key_len := 30
|
||||
repeat := 1
|
||||
for i := 2048; i <= 10000000; i = i * 2 {
|
||||
mut arr := []string
|
||||
for _ in 0..i {
|
||||
mut buf := []byte
|
||||
for j in 0..key_len {
|
||||
buf << byte(rand.next(int(`z`) - int(`a`)) + `a`)
|
||||
}
|
||||
s := string(buf)
|
||||
arr << s
|
||||
}
|
||||
println("$arr.len keys of length $key_len")
|
||||
// Uncomment the benchmark you would like to benchmark
|
||||
// Run one or two at a time while memory leaks is a thing
|
||||
hashmap_get_bench(arr, repeat)
|
||||
map_get_bench(arr, repeat)
|
||||
// hashmap_set_bench(arr, repeat)
|
||||
// map_set_bench(arr, repeat)
|
||||
println('')
|
||||
}
|
||||
}
|
||||
|
||||
fn benchmark_few_keys() {
|
||||
key_len := 30
|
||||
repeat := 10000
|
||||
println("Benchmarks are repeated $repeat times")
|
||||
for i := 16; i <= 2048; i = i * 2 {
|
||||
mut arr := []string
|
||||
for _ in 0..i {
|
||||
mut buf := []byte
|
||||
for j in 0..key_len {
|
||||
buf << byte(rand.next(int(`z`) - int(`a`)) + `a`)
|
||||
}
|
||||
s := string(buf)
|
||||
arr << s
|
||||
}
|
||||
println("$arr.len keys of length $key_len")
|
||||
// Uncomment the benchmark you would like to benchmark
|
||||
// Run one or two at a time while memory leaks is a thing
|
||||
hashmap_get_bench(arr, repeat)
|
||||
map_get_bench(arr, repeat)
|
||||
// hashmap_set_bench(arr, repeat)
|
||||
// map_set_bench(arr, repeat)
|
||||
println('')
|
||||
}
|
||||
}
|
||||
|
||||
fn main() {
|
||||
// Uncomment below to benchmark on many keys
|
||||
// benchmark_many_keys()
|
||||
benchmark_few_keys()
|
||||
}
|
Reference in New Issue
Block a user