mirror of
https://github.com/gohugoio/hugo.git
synced 2024-12-25 05:04:46 +00:00
89 lines
2 KiB
Go
89 lines
2 KiB
Go
// Copyright 2019 The Hugo Authors. All rights reserved.
|
|
//
|
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
// you may not use this file except in compliance with the License.
|
|
// You may obtain a copy of the License at
|
|
// http://www.apache.org/licenses/LICENSE-2.0
|
|
//
|
|
// Unless required by applicable law or agreed to in writing, software
|
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
// See the License for the specific language governing permissions and
|
|
// limitations under the License.
|
|
|
|
package identity
|
|
|
|
import (
|
|
"fmt"
|
|
"math/rand"
|
|
"strconv"
|
|
"testing"
|
|
|
|
qt "github.com/frankban/quicktest"
|
|
)
|
|
|
|
func TestIdentityManager(t *testing.T) {
|
|
c := qt.New(t)
|
|
|
|
id1 := testIdentity{name: "id1"}
|
|
im := NewManager(id1)
|
|
|
|
c.Assert(im.Search(id1).GetIdentity(), qt.Equals, id1)
|
|
c.Assert(im.Search(testIdentity{name: "notfound"}), qt.Equals, nil)
|
|
}
|
|
|
|
func BenchmarkIdentityManager(b *testing.B) {
|
|
createIds := func(num int) []Identity {
|
|
ids := make([]Identity, num)
|
|
for i := 0; i < num; i++ {
|
|
ids[i] = testIdentity{name: fmt.Sprintf("id%d", i)}
|
|
}
|
|
return ids
|
|
}
|
|
|
|
b.Run("Add", func(b *testing.B) {
|
|
c := qt.New(b)
|
|
b.StopTimer()
|
|
ids := createIds(b.N)
|
|
im := NewManager(testIdentity{"first"})
|
|
b.StartTimer()
|
|
|
|
for i := 0; i < b.N; i++ {
|
|
im.Add(ids[i])
|
|
}
|
|
|
|
b.StopTimer()
|
|
c.Assert(im.GetIdentities(), qt.HasLen, b.N+1)
|
|
})
|
|
|
|
b.Run("Search", func(b *testing.B) {
|
|
c := qt.New(b)
|
|
b.StopTimer()
|
|
ids := createIds(b.N)
|
|
im := NewManager(testIdentity{"first"})
|
|
|
|
for i := 0; i < b.N; i++ {
|
|
im.Add(ids[i])
|
|
}
|
|
|
|
b.StartTimer()
|
|
|
|
for i := 0; i < b.N; i++ {
|
|
name := "id" + strconv.Itoa(rand.Intn(b.N))
|
|
id := im.Search(testIdentity{name: name})
|
|
c.Assert(id.GetIdentity().Name(), qt.Equals, name)
|
|
}
|
|
})
|
|
}
|
|
|
|
type testIdentity struct {
|
|
name string
|
|
}
|
|
|
|
func (id testIdentity) GetIdentity() Identity {
|
|
return id
|
|
}
|
|
|
|
func (id testIdentity) Name() string {
|
|
return id.name
|
|
}
|