github.com/kazu/loncha@v0.6.3/container_list/list_test.go (about) 1 package list 2 3 import ( 4 "testing" 5 6 "github.com/kazu/loncha" 7 // list "github.com/kazu/loncha/container_list" 8 9 "github.com/kazu/loncha/list_head" 10 "github.com/stretchr/testify/assert" 11 ) 12 13 func TestContainerListAdd(t *testing.T) { 14 list_head.MODE_CONCURRENT = true 15 var list ListEntry 16 list.Init() 17 18 hoge := ListEntry{ID: 1, Name: "aaa"} 19 hoge.Init() 20 list.Add(&hoge) 21 22 hoge2 := ListEntry{ID: 2, Name: "bbb"} 23 hoge2.Init() 24 25 hoge.Add(&hoge2) 26 27 assert.Equal(t, hoge.Next().ID, 2) 28 assert.Equal(t, hoge.Len(), 2) 29 assert.Equal(t, hoge.Next().Len(), 2) 30 31 cnt := 0 32 list.Each(func(e *ListEntry) { 33 if cnt == 0 { 34 assert.Equal(t, 1, e.ID) 35 } else { 36 assert.Equal(t, 2, e.ID) 37 } 38 cnt++ 39 }) 40 assert.Equal(t, 2, cnt) 41 } 42 43 func TestDelete(t *testing.T) { 44 45 tests := []struct { 46 Name string 47 Count int 48 deletes []int 49 }{ 50 { 51 Name: "first middle last delete", 52 Count: 10, 53 deletes: []int{0, 5, 9}, 54 }, 55 { 56 Name: "continus delete", 57 Count: 10, 58 deletes: []int{4, 5, 6}, 59 }, 60 { 61 Name: "continus delete in last", 62 Count: 10, 63 deletes: []int{3, 4, 5, 8, 9}, 64 }, 65 { 66 Name: "continus delete in first", 67 Count: 10, 68 deletes: []int{0, 1, 2, 4, 5, 6}, 69 }, 70 { 71 Name: "all deleted", 72 Count: 3, 73 deletes: []int{0, 1, 2}, 74 }, 75 } 76 77 makeElement := func() *ListEntry { 78 e := &ListEntry{} 79 e.Init() 80 return e 81 } 82 83 list_head.MODE_CONCURRENT = true 84 85 for _, test := range tests { 86 t.Run(test.Name, func(t *testing.T) { 87 var list ListEntry 88 list.Init() 89 for i := 0; i < test.Count; i++ { 90 e := makeElement() 91 list.Add(e) 92 93 found := loncha.Contain(&test.deletes, func(idx int) bool { 94 return test.deletes[idx] == i 95 }) 96 if found { 97 e.Delete() 98 } 99 } 100 if list.Len() != test.Count-len(test.deletes) { 101 t.Errorf("missmatch len=%d cnt=%d deletes=%d", list.Len(), test.Count, len(test.deletes)) 102 } 103 104 }) 105 } 106 }