github.com/KYVENetwork/cometbft/v38@v38.0.3/libs/cmap/cmap_test.go (about)

     1  package cmap
     2  
     3  import (
     4  	"fmt"
     5  	"strings"
     6  	"testing"
     7  
     8  	"github.com/stretchr/testify/assert"
     9  )
    10  
    11  func TestIterateKeysWithValues(t *testing.T) {
    12  	cmap := NewCMap()
    13  
    14  	for i := 1; i <= 10; i++ {
    15  		cmap.Set(fmt.Sprintf("key%d", i), fmt.Sprintf("value%d", i))
    16  	}
    17  
    18  	// Testing size
    19  	assert.Equal(t, 10, cmap.Size())
    20  	assert.Equal(t, 10, len(cmap.Keys()))
    21  	assert.Equal(t, 10, len(cmap.Values()))
    22  
    23  	// Iterating Keys, checking for matching Value
    24  	for _, key := range cmap.Keys() {
    25  		val := strings.ReplaceAll(key, "key", "value")
    26  		assert.Equal(t, val, cmap.Get(key))
    27  	}
    28  
    29  	// Test if all keys are within []Keys()
    30  	keys := cmap.Keys()
    31  	for i := 1; i <= 10; i++ {
    32  		assert.Contains(t, keys, fmt.Sprintf("key%d", i), "cmap.Keys() should contain key")
    33  	}
    34  
    35  	// Delete 1 Key
    36  	cmap.Delete("key1")
    37  
    38  	assert.NotEqual(
    39  		t,
    40  		len(keys),
    41  		len(cmap.Keys()),
    42  		"[]keys and []Keys() should not be equal, they are copies, one item was removed",
    43  	)
    44  }
    45  
    46  func TestContains(t *testing.T) {
    47  	cmap := NewCMap()
    48  
    49  	cmap.Set("key1", "value1")
    50  
    51  	// Test for known values
    52  	assert.True(t, cmap.Has("key1"))
    53  	assert.Equal(t, "value1", cmap.Get("key1"))
    54  
    55  	// Test for unknown values
    56  	assert.False(t, cmap.Has("key2"))
    57  	assert.Nil(t, cmap.Get("key2"))
    58  }
    59  
    60  func BenchmarkCMapHas(b *testing.B) {
    61  	m := NewCMap()
    62  	for i := 0; i < 1000; i++ {
    63  		m.Set(string(rune(i)), i)
    64  	}
    65  	b.ResetTimer()
    66  	for i := 0; i < b.N; i++ {
    67  		m.Has(string(rune(i)))
    68  	}
    69  }