Skip to content

Instantly share code, notes, and snippets.

@fujimoto-s
Created November 8, 2017 02:58
Show Gist options
  • Save fujimoto-s/d988a119c2d38cf56d937b13b3c94e08 to your computer and use it in GitHub Desktop.
Save fujimoto-s/d988a119c2d38cf56d937b13b3c94e08 to your computer and use it in GitHub Desktop.
package main
import (
"bufio"
"fmt"
"github.com/yl2chen/cidranger"
"math/rand"
"net"
"os"
"time"
)
type Route struct {
net *net.IPNet
data string
}
func (r Route) Network() net.IPNet {
return *r.net
}
func main() {
trie := cidranger.NewPCTrieRanger()
// Insert
var elapsed int64
count := 0
all := 128 * 128 * 128
for b := 0; b < 128; b++ {
for c := 0; c < 128; c++ {
for d := 0; d < 128; d++ {
count += 1
fmt.Printf("\rInserting: %d%%", count*100/all)
addr := fmt.Sprintf("%d.%d.%d.0/24", b, c, d)
_, network, _ := net.ParseCIDR(addr)
entry := Route{net: network, data: "some routes"}
start := time.Now()
trie.Insert(entry)
end := time.Now()
elapsed += end.Sub(start).Nanoseconds()
}
}
}
fmt.Printf("\nInsertion 128^3 routes: %dns\n", elapsed)
fmt.Printf(" Average: %dns\n", elapsed/int64(all))
// Search
rand.Seed(time.Now().UnixNano())
elapsed = 0
for i := 0; i < 10000; i++ {
a := rand.Intn(128)
b := rand.Intn(128)
c := rand.Intn(128)
addr := net.IPv4(byte(a), byte(b), byte(c), 0)
start := time.Now()
trie.ContainingNetworks(addr)
end := time.Now()
elapsed += end.Sub(start).Nanoseconds()
}
fmt.Printf("Search 10000 times: %dns\n", elapsed)
fmt.Printf(" Average: %dns\n", elapsed/10000)
fmt.Print("Press 'Enter' to quit...")
bufio.NewReader(os.Stdin).ReadBytes('\n')
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment