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  }