123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596 |
- // Copyright (C) 2019 The Syncthing Authors.
- //
- // This Source Code Form is subject to the terms of the Mozilla Public
- // License, v. 2.0. If a copy of the MPL was not distributed with this file,
- // You can obtain one at https://mozilla.org/MPL/2.0/.
- package registry
- import (
- "net"
- "testing"
- )
- func TestRegistry(t *testing.T) {
- r := New()
- want := func(i int) func(interface{}) bool {
- return func(x interface{}) bool { return x.(int) == i }
- }
- if res := r.Get("int", want(1)); res != nil {
- t.Error("unexpected")
- }
- r.Register("int", 1)
- r.Register("int", 11)
- r.Register("int4", 4)
- r.Register("int4", 44)
- r.Register("int6", 6)
- r.Register("int6", 66)
- if res := r.Get("int", want(1)).(int); res != 1 {
- t.Error("unexpected", res)
- }
- // int is prefix of int4, so returns 1
- if res := r.Get("int4", want(1)).(int); res != 1 {
- t.Error("unexpected", res)
- }
- r.Unregister("int", 1)
- if res := r.Get("int", want(1)).(int); res == 1 {
- t.Error("unexpected", res)
- }
- if res := r.Get("int6", want(6)).(int); res != 6 {
- t.Error("unexpected", res)
- }
- // Unregister 11, int should be impossible to find
- r.Unregister("int", 11)
- if res := r.Get("int", want(11)); res != nil {
- t.Error("unexpected")
- }
- // Unregister a second time does nothing.
- r.Unregister("int", 1)
- // Can have multiple of the same
- r.Register("int", 1)
- r.Register("int", 1)
- r.Unregister("int", 1)
- if res := r.Get("int4", want(1)).(int); res != 1 {
- t.Error("unexpected", res)
- }
- }
- func TestShortSchemeFirst(t *testing.T) {
- r := New()
- r.Register("foo", 0)
- r.Register("foobar", 1)
- // If we don't care about the value, we should get the one with "foo".
- res := r.Get("foo", func(interface{}) bool { return false })
- if res != 0 {
- t.Error("unexpected", res)
- }
- }
- func BenchmarkGet(b *testing.B) {
- r := New()
- for _, addr := range []string{"192.168.1.1", "172.1.1.1", "10.1.1.1"} {
- r.Register("tcp", &net.TCPAddr{IP: net.ParseIP(addr)})
- }
- b.ReportAllocs()
- b.ResetTimer()
- for i := 0; i < b.N; i++ {
- r.Get("tcp", func(x interface{}) bool {
- return x.(*net.TCPAddr).IP.IsUnspecified()
- })
- }
- }
|