package syncutils import ( "fmt" "strconv" "testing" ) func TestSyncSlice(t *testing.T) { syncSlice := NewSyncSlice([]string{"aaa", "bbb", "ccc"}, false) syncSlice.Append("ddd") fmt.Println("Len:", syncSlice.Len()) fmt.Println("Cap:", syncSlice.Cap()) fmt.Println() syncSlice.Range(func(index int, e string) bool { fmt.Println("Index", strconv.Itoa(index)+":", e) return false }) fmt.Println() deleted := syncSlice.DeleteAt(3) fmt.Println("Deleted:", deleted) fmt.Println() syncSlice.Range(func(index int, e string) bool { fmt.Println("Index", strconv.Itoa(index)+":", e) return false }) fmt.Println() syncSlice.Lock() syncSlice.AppendNoLock("ddd") fmt.Println("Len:", syncSlice.LenNoLock()) fmt.Println("Cap:", syncSlice.CapNoLock()) fmt.Println() syncSlice.RangeNoLock(func(index int, e string) bool { fmt.Println("Index", strconv.Itoa(index)+":", e) return false }) fmt.Println() deleted = syncSlice.DeleteAtNoLock(3) fmt.Println("Deleted:", deleted) fmt.Println() syncSlice.RangeNoLock(func(index int, e string) bool { fmt.Println("Index", strconv.Itoa(index)+":", e) return false }) fmt.Println() syncSlice.Unlock() rwSyncSlice := NewSyncSlice([]string{"aaa", "bbb", "ccc"}, true) rwSyncSlice.Append("ddd") fmt.Println("Len:", rwSyncSlice.Len()) fmt.Println("Cap:", rwSyncSlice.Cap()) fmt.Println() rwSyncSlice.Range(func(index int, e string) bool { fmt.Println("Index", strconv.Itoa(index)+":", e) return false }) fmt.Println() deleted = rwSyncSlice.DeleteAt(3) fmt.Println("Deleted:", deleted) fmt.Println() rwSyncSlice.Range(func(index int, e string) bool { fmt.Println("Index", strconv.Itoa(index)+":", e) return false }) fmt.Println() rwSyncSlice.Lock() rwSyncSlice.AppendNoLock("ddd") rwSyncSlice.Unlock() rwSyncSlice.RLock() fmt.Println("Len:", rwSyncSlice.LenNoLock()) fmt.Println("Cap:", rwSyncSlice.CapNoLock()) fmt.Println() rwSyncSlice.RangeNoLock(func(index int, e string) bool { fmt.Println("Index", strconv.Itoa(index)+":", e) return false }) rwSyncSlice.RUnlock() fmt.Println() rwSyncSlice.Lock() deleted = rwSyncSlice.DeleteAtNoLock(3) rwSyncSlice.Unlock() fmt.Println("Deleted:", deleted) fmt.Println() rwSyncSlice.RLock() rwSyncSlice.RangeNoLock(func(index int, e string) bool { fmt.Println("Index", strconv.Itoa(index)+":", e) return false }) rwSyncSlice.RUnlock() fmt.Println() }