src.elv.sh@v0.21.0-dev.0.20240515223629-06979efb9a2a/pkg/eval/vals/has_key_test.go (about)

     1  package vals
     2  
     3  import (
     4  	"testing"
     5  
     6  	"src.elv.sh/pkg/tt"
     7  )
     8  
     9  type hasKeyer struct{ key any }
    10  
    11  func (h hasKeyer) HasKey(k any) bool { return k == h.key }
    12  
    13  func TestHasKey(t *testing.T) {
    14  	tt.Test(t, HasKey,
    15  		// Map
    16  		Args(MakeMap("k", "v"), "k").Rets(true),
    17  		Args(MakeMap("k", "v"), "bad").Rets(false),
    18  		// HasKeyer
    19  		Args(hasKeyer{"valid"}, "valid").Rets(true),
    20  		Args(hasKeyer{"valid"}, "invalid").Rets(false),
    21  		// Fallback to IterateKeys
    22  		Args(keysIterator{vs("lorem")}, "lorem").Rets(true),
    23  		Args(keysIterator{vs("lorem")}, "ipsum").Rets(false),
    24  		// Fallback to Len
    25  		Args(MakeList("lorem", "ipsum"), "0").Rets(true),
    26  		Args(MakeList("lorem", "ipsum"), "0..").Rets(true),
    27  		Args(MakeList("lorem", "ipsum"), "0..=").Rets(true),
    28  		Args(MakeList("lorem", "ipsum"), "..2").Rets(true),
    29  		Args(MakeList("lorem", "ipsum"), "..=2").Rets(false),
    30  		Args(MakeList("lorem", "ipsum"), "2").Rets(false),
    31  		Args(MakeList("lorem", "ipsum", "dolor", "sit"), "0..4").Rets(true),
    32  		Args(MakeList("lorem", "ipsum", "dolor", "sit"), "0..=4").Rets(false),
    33  		Args(MakeList("lorem", "ipsum", "dolor", "sit"), "1..3").Rets(true),
    34  		Args(MakeList("lorem", "ipsum", "dolor", "sit"), "1..5").Rets(false),
    35  		Args(MakeList("lorem", "ipsum", "dolor", "sit"), "-2..=-1").Rets(true),
    36  
    37  		// Non-container
    38  		Args(1, "0").Rets(false),
    39  	)
    40  }