github.com/kazu/loncha@v0.6.3/example/sample_test.go (about)

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