Skip to content

Instantly share code, notes, and snippets.

@moznion
Created November 14, 2022 01:49
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save moznion/eb867c8dd2a708f0acd184ee8d5c758b to your computer and use it in GitHub Desktop.
Save moznion/eb867c8dd2a708f0acd184ee8d5c758b to your computer and use it in GitHub Desktop.
package iprtb
import (
"net"
"testing"
)
func Benchmark_PrefixTreeAlgorithm(b *testing.B) {
rtb := NewRouteTable()
target := net.IPv4(192, 0, 2, 100)
_ = rtb.AddRoute(&Route{
Destination: &net.IPNet{
IP: net.IPv4(192, 0, 1, 0),
Mask: net.IPv4Mask(255, 255, 255, 0),
},
Gateway: net.IPv4(192, 0, 2, 1),
NetworkInterface: "ifb1",
Metric: 1,
})
_ = rtb.AddRoute(&Route{
Destination: &net.IPNet{
IP: net.IPv4(192, 0, 2, 0),
Mask: net.IPv4Mask(255, 255, 255, 0),
},
Gateway: net.IPv4(192, 0, 2, 1),
NetworkInterface: "ifb2",
Metric: 1,
})
_ = rtb.AddRoute(&Route{
Destination: &net.IPNet{
IP: net.IPv4(192, 0, 0, 0),
Mask: net.IPv4Mask(255, 255, 0, 0),
},
Gateway: net.IPv4(192, 0, 2, 1),
NetworkInterface: "ifb3",
Metric: 1,
})
_ = rtb.AddRoute(&Route{
Destination: &net.IPNet{
IP: net.IPv4(192, 0, 0, 0),
Mask: net.IPv4Mask(255, 0, 0, 0),
},
Gateway: net.IPv4(192, 0, 2, 1),
NetworkInterface: "ifb4",
Metric: 1,
})
matched, _ := rtb.MatchRoute(target)
if matched.Unwrap().NetworkInterface != "ifb2" {
b.Fatal("precondition unmatched; route not exists")
}
for n := 0; n < b.N; n++ {
rtb.MatchRoute(target)
}
}
func Benchmark_LinearSearch(b *testing.B) {
rtb := NewRouteTableOld()
target := net.IPv4(192, 0, 2, 100)
rtb.AddRoute(
net.IPNet{
IP: net.IPv4(192, 0, 1, 0),
Mask: net.IPv4Mask(255, 255, 255, 0),
},
net.IPv4(192, 0, 2, 1),
"ifb1",
1,
)
rtb.AddRoute(
net.IPNet{
IP: net.IPv4(192, 0, 2, 0),
Mask: net.IPv4Mask(255, 255, 255, 0),
},
net.IPv4(192, 0, 2, 1),
"ifb2",
1,
)
rtb.AddRoute(
net.IPNet{
IP: net.IPv4(192, 0, 0, 0),
Mask: net.IPv4Mask(255, 255, 0, 0),
},
net.IPv4(192, 0, 2, 1),
"ifb3",
1,
)
rtb.AddRoute(
net.IPNet{
IP: net.IPv4(192, 0, 0, 0),
Mask: net.IPv4Mask(255, 0, 0, 0),
},
net.IPv4(192, 0, 2, 1),
"ifb4",
1,
)
matched := rtb.MatchRoute(target)
if matched.Unwrap().NwInterface != "ifb2" {
b.Fatal("precondition unmatched; route not exists")
}
for n := 0; n < b.N; n++ {
rtb.MatchRoute(target)
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment