github.com/0chain/gosdk@v1.17.11/core/util/rand_test.go (about)

     1  package util
     2  
     3  import (
     4  	"testing"
     5  
     6  	"github.com/stretchr/testify/require"
     7  )
     8  
     9  func TestGetRandomSlice(t *testing.T) {
    10  	s := []string{"hello", "world", "beuty"}
    11  	ns := GetRandom(s, 2)
    12  	if len(ns) != 2 {
    13  		t.Fatalf("Getrandom() failed")
    14  	}
    15  	ns = GetRandom(s, 4)
    16  	if len(ns) != 3 {
    17  		t.Fatalf("Getrandom() failed")
    18  	}
    19  	// Tests for when either len(in) = 0 or n = 0
    20  	s = []string{}
    21  	ns = GetRandom(s, 2)
    22  	if len(ns) != 0 {
    23  		t.Fatalf("Getrandom() failed")
    24  	}
    25  	s = append(s, "hello")
    26  	ns = GetRandom(s, 0)
    27  	if len(ns) != 0 {
    28  		t.Fatalf("Getrandom() failed")
    29  	}
    30  }
    31  
    32  func TestRand(t *testing.T) {
    33  	s := []string{"a", "b", "c", "d", "e", "f", "h", "i", "j", "k"}
    34  
    35  	r := NewRand(len(s))
    36  
    37  	selected := make(map[int]string)
    38  
    39  	for i := 0; i < len(s); i++ {
    40  		index, err := r.Next()
    41  
    42  		require.Equal(t, nil, err)
    43  
    44  		_, ok := selected[index]
    45  
    46  		require.Equal(t, false, ok)
    47  
    48  		selected[index] = s[index]
    49  	}
    50  
    51  	for i := 0; i < len(s); i++ {
    52  		require.Equal(t, s[i], selected[i])
    53  	}
    54  
    55  	_, err := r.Next()
    56  
    57  	require.Equal(t, ErrNoItem, err)
    58  
    59  }