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  }