github.com/MetalBlockchain/metalgo@v1.11.9/database/meterdb/db_test.go (about) 1 // Copyright (C) 2019-2024, Ava Labs, Inc. All rights reserved. 2 // See the file LICENSE for licensing terms. 3 4 package meterdb 5 6 import ( 7 "fmt" 8 "testing" 9 10 "github.com/prometheus/client_golang/prometheus" 11 "github.com/stretchr/testify/require" 12 13 "github.com/MetalBlockchain/metalgo/database" 14 "github.com/MetalBlockchain/metalgo/database/memdb" 15 ) 16 17 func TestInterface(t *testing.T) { 18 for name, test := range database.Tests { 19 t.Run(name, func(t *testing.T) { 20 baseDB := memdb.New() 21 db, err := New(prometheus.NewRegistry(), baseDB) 22 require.NoError(t, err) 23 24 test(t, db) 25 }) 26 } 27 } 28 29 func newDB(t testing.TB) database.Database { 30 baseDB := memdb.New() 31 db, err := New(prometheus.NewRegistry(), baseDB) 32 require.NoError(t, err) 33 return db 34 } 35 36 func FuzzKeyValue(f *testing.F) { 37 database.FuzzKeyValue(f, newDB(f)) 38 } 39 40 func FuzzNewIteratorWithPrefix(f *testing.F) { 41 database.FuzzNewIteratorWithPrefix(f, newDB(f)) 42 } 43 44 func FuzzNewIteratorWithStartAndPrefix(f *testing.F) { 45 database.FuzzNewIteratorWithStartAndPrefix(f, newDB(f)) 46 } 47 48 func BenchmarkInterface(b *testing.B) { 49 for _, size := range database.BenchmarkSizes { 50 keys, values := database.SetupBenchmark(b, size[0], size[1], size[2]) 51 for name, bench := range database.Benchmarks { 52 b.Run(fmt.Sprintf("meterdb_%d_pairs_%d_keys_%d_values_%s", size[0], size[1], size[2], name), func(b *testing.B) { 53 bench(b, newDB(b), keys, values) 54 }) 55 } 56 } 57 }