github.com/altipla-consulting/ravendb-go-client@v0.1.3/string_array_test.go (about)

     1  package ravendb
     2  
     3  import (
     4  	"sort"
     5  	"testing"
     6  
     7  	"github.com/stretchr/testify/assert"
     8  )
     9  
    10  // stringArrayEq returns true if arrays have the same content, ignoring order
    11  func stringArrayEq(a1, a2 []string) bool {
    12  	if len(a1) != len(a2) {
    13  		return false
    14  	}
    15  	if len(a1) == 0 {
    16  		return true
    17  	}
    18  	a1c := stringArrayCopy(a1)
    19  	a2c := stringArrayCopy(a2)
    20  	sort.Strings(a1c)
    21  	sort.Strings(a2c)
    22  	for i, s := range a1c {
    23  		if s != a2c[i] {
    24  			return false
    25  		}
    26  	}
    27  	return true
    28  }
    29  
    30  func TestStringArraySubtract(t *testing.T) {
    31  	var tests = []struct {
    32  		a1, a2 []string
    33  		exp    []string
    34  	}{
    35  		{nil, nil, nil},
    36  		{[]string{}, nil, nil},
    37  		{[]string{"a"}, nil, []string{"a"}},
    38  		{[]string{"a", "b"}, []string{"a"}, []string{"b"}},
    39  	}
    40  	for _, test := range tests {
    41  		got := stringArraySubtract(test.a1, test.a2)
    42  		sort.Strings(got)
    43  		if !stringArrayEq(test.exp, got) {
    44  			t.Fatalf("got: %#v, exp: %#v", got, test.exp)
    45  		}
    46  	}
    47  }
    48  
    49  func TestStringArrayContains(t *testing.T) {
    50  	var tests = []struct {
    51  		a   []string
    52  		s   string
    53  		exp bool
    54  	}{
    55  		{nil, "a", false},
    56  		{[]string{}, "a", false},
    57  		{[]string{"a"}, "a", true},
    58  		{[]string{"b", "a"}, "a", true},
    59  		{[]string{"b", "a", "c", "d"}, "a", true},
    60  		{[]string{"a"}, "A", false},
    61  		{[]string{"a", "a"}, "a", true},
    62  		{[]string{"a", ""}, "", true},
    63  		{[]string{}, "", false},
    64  	}
    65  	for _, test := range tests {
    66  		got := stringArrayContains(test.a, test.s)
    67  		assert.Equal(t, test.exp, got)
    68  	}
    69  }
    70  
    71  func TestStringArrayRemoveDuplicates(t *testing.T) {
    72  	var tests = []struct {
    73  		a   []string
    74  		exp []string
    75  	}{
    76  		{nil, nil},
    77  		{[]string{}, []string{}},
    78  		{[]string{"a"}, []string{"a"}},
    79  		{[]string{"a", "a"}, []string{"a"}},
    80  		{[]string{"a", "b"}, []string{"a", "b"}},
    81  		{[]string{"a", "b", "a"}, []string{"a", "b"}},
    82  		{[]string{"a", "A", "a", "z", "a"}, []string{"a", "z", "A"}},
    83  	}
    84  	for _, test := range tests {
    85  		got := stringArrayRemoveDuplicates(test.a)
    86  		eq := stringArrayEq(test.exp, got)
    87  		assert.True(t, eq, "Expected: %v, got: %v", test.exp, got)
    88  	}
    89  }