mirror of https://github.com/poanetwork/gecko.git
63 lines
1.9 KiB
Go
63 lines
1.9 KiB
Go
// (c) 2019-2020, Ava Labs, Inc. All rights reserved.
|
|
// See the file LICENSE for licensing terms.
|
|
|
|
package cache
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"github.com/ava-labs/gecko/ids"
|
|
)
|
|
|
|
type evictable struct {
|
|
id ids.ID
|
|
evicted int
|
|
}
|
|
|
|
func (e *evictable) ID() ids.ID { return e.id }
|
|
func (e *evictable) Evict() { e.evicted++ }
|
|
|
|
func TestEvictableLRU(t *testing.T) {
|
|
cache := EvictableLRU{}
|
|
|
|
expectedValue1 := &evictable{id: ids.NewID([32]byte{1})}
|
|
if returnedValue := cache.Deduplicate(expectedValue1).(*evictable); returnedValue != expectedValue1 {
|
|
t.Fatalf("Returned unknown value")
|
|
} else if expectedValue1.evicted != 0 {
|
|
t.Fatalf("Value was evicted unexpectedly")
|
|
} else if returnedValue := cache.Deduplicate(expectedValue1).(*evictable); returnedValue != expectedValue1 {
|
|
t.Fatalf("Returned unknown value")
|
|
} else if expectedValue1.evicted != 0 {
|
|
t.Fatalf("Value was evicted unexpectedly")
|
|
}
|
|
|
|
expectedValue2 := &evictable{id: ids.NewID([32]byte{2})}
|
|
if returnedValue := cache.Deduplicate(expectedValue2).(*evictable); returnedValue != expectedValue2 {
|
|
t.Fatalf("Returned unknown value")
|
|
} else if expectedValue1.evicted != 1 {
|
|
t.Fatalf("Value should have been evicted")
|
|
} else if expectedValue2.evicted != 0 {
|
|
t.Fatalf("Value was evicted unexpectedly")
|
|
}
|
|
|
|
cache.Size = 2
|
|
|
|
expectedValue3 := &evictable{id: ids.NewID([32]byte{2})}
|
|
if returnedValue := cache.Deduplicate(expectedValue3).(*evictable); returnedValue != expectedValue2 {
|
|
t.Fatalf("Returned unknown value")
|
|
} else if expectedValue1.evicted != 1 {
|
|
t.Fatalf("Value should have been evicted")
|
|
} else if expectedValue2.evicted != 0 {
|
|
t.Fatalf("Value was evicted unexpectedly")
|
|
}
|
|
|
|
cache.Flush()
|
|
if expectedValue1.evicted != 1 {
|
|
t.Fatalf("Value should have been evicted")
|
|
} else if expectedValue2.evicted != 1 {
|
|
t.Fatalf("Value should have been evicted")
|
|
} else if expectedValue3.evicted != 0 {
|
|
t.Fatalf("Value was evicted unexpectedly")
|
|
}
|
|
}
|