@@ -98,7 +98,7 @@ func TestSlice(t *testing.T) {
98 original := []int{1, 2, 3}
98 original := []int{1, 2, 3}
99 s := NewSliceFrom(original)
99 s := NewSliceFrom(original)
100 assert.Equal(t, 3, s.Len())
100 assert.Equal(t, 3, s.Len())
102 // Verify it's a copy, not a reference
102 // Verify it's a copy, not a reference
103 original[0] = 999
103 original[0] = 999
104 val, ok := s.Get(0)
104 val, ok := s.Get(0)
@@ -110,12 +110,12 @@ func TestSlice(t *testing.T) {
110 s := NewSlice[string]()
110 s := NewSlice[string]()
111 s.Append("hello")
111 s.Append("hello")
112 s.Append("world")
112 s.Append("world")
114 assert.Equal(t, 2, s.Len())
114 assert.Equal(t, 2, s.Len())
115 val, ok := s.Get(0)
115 val, ok := s.Get(0)
116 require.True(t, ok)
116 require.True(t, ok)
117 assert.Equal(t, "hello", val)
117 assert.Equal(t, "hello", val)
119 val, ok = s.Get(1)
119 val, ok = s.Get(1)
120 require.True(t, ok)
120 require.True(t, ok)
121 assert.Equal(t, "world", val)
121 assert.Equal(t, "world", val)
@@ -125,12 +125,12 @@ func TestSlice(t *testing.T) {
125 s := NewSlice[string]()
125 s := NewSlice[string]()
126 s.Append("world")
126 s.Append("world")
127 s.Prepend("hello")
127 s.Prepend("hello")
129 assert.Equal(t, 2, s.Len())
129 assert.Equal(t, 2, s.Len())
130 val, ok := s.Get(0)
130 val, ok := s.Get(0)
131 require.True(t, ok)
131 require.True(t, ok)
132 assert.Equal(t, "hello", val)
132 assert.Equal(t, "hello", val)
134 val, ok = s.Get(1)
134 val, ok = s.Get(1)
135 require.True(t, ok)
135 require.True(t, ok)
136 assert.Equal(t, "world", val)
136 assert.Equal(t, "world", val)
@@ -138,21 +138,21 @@ func TestSlice(t *testing.T) {
139 t.Run("Delete", func(t *testing.T) {
139 t.Run("Delete", func(t *testing.T) {
140 s := NewSliceFrom([]int{1, 2, 3, 4, 5})
140 s := NewSliceFrom([]int{1, 2, 3, 4, 5})
142 // Delete middle element
142 // Delete middle element
143 ok := s.Delete(2)
143 ok := s.Delete(2)
144 assert.True(t, ok)
144 assert.True(t, ok)
145 assert.Equal(t, 4, s.Len())
145 assert.Equal(t, 4, s.Len())
147 expected := []int{1, 2, 4, 5}
147 expected := []int{1, 2, 4, 5}
148 actual := s.Slice()
148 actual := s.Slice()
149 assert.Equal(t, expected, actual)
149 assert.Equal(t, expected, actual)
151 // Delete out of bounds
151 // Delete out of bounds
152 ok = s.Delete(10)
152 ok = s.Delete(10)
153 assert.False(t, ok)
153 assert.False(t, ok)
154 assert.Equal(t, 4, s.Len())
154 assert.Equal(t, 4, s.Len())
156 // Delete negative index
156 // Delete negative index
157 ok = s.Delete(-1)
157 ok = s.Delete(-1)
158 assert.False(t, ok)
158 assert.False(t, ok)
@@ -161,15 +161,15 @@ func TestSlice(t *testing.T) {
162 t.Run("Get", func(t *testing.T) {
162 t.Run("Get", func(t *testing.T) {
163 s := NewSliceFrom([]string{"a", "b", "c"})
163 s := NewSliceFrom([]string{"a", "b", "c"})
165 val, ok := s.Get(1)
165 val, ok := s.Get(1)
166 require.True(t, ok)
166 require.True(t, ok)
167 assert.Equal(t, "b", val)
167 assert.Equal(t, "b", val)
169 // Out of bounds
169 // Out of bounds
170 _, ok = s.Get(10)
170 _, ok = s.Get(10)
171 assert.False(t, ok)
171 assert.False(t, ok)
173 // Negative index
173 // Negative index
174 _, ok = s.Get(-1)
174 _, ok = s.Get(-1)
175 assert.False(t, ok)
175 assert.False(t, ok)
@@ -177,18 +177,18 @@ func TestSlice(t *testing.T) {
178 t.Run("Set", func(t *testing.T) {
178 t.Run("Set", func(t *testing.T) {
179 s := NewSliceFrom([]string{"a", "b", "c"})
179 s := NewSliceFrom([]string{"a", "b", "c"})
181 ok := s.Set(1, "modified")
181 ok := s.Set(1, "modified")
182 assert.True(t, ok)
182 assert.True(t, ok)
184 val, ok := s.Get(1)
184 val, ok := s.Get(1)
185 require.True(t, ok)
185 require.True(t, ok)
186 assert.Equal(t, "modified", val)
186 assert.Equal(t, "modified", val)
188 // Out of bounds
188 // Out of bounds
189 ok = s.Set(10, "invalid")
189 ok = s.Set(10, "invalid")
190 assert.False(t, ok)
190 assert.False(t, ok)
192 // Negative index
192 // Negative index
193 ok = s.Set(-1, "invalid")
193 ok = s.Set(-1, "invalid")
194 assert.False(t, ok)
194 assert.False(t, ok)
@@ -198,13 +198,13 @@ func TestSlice(t *testing.T) {
198 s := NewSlice[int]()
198 s := NewSlice[int]()
199 s.Append(1)
199 s.Append(1)
200 s.Append(2)
200 s.Append(2)
202 newItems := []int{10, 20, 30}
202 newItems := []int{10, 20, 30}
203 s.SetSlice(newItems)
203 s.SetSlice(newItems)
205 assert.Equal(t, 3, s.Len())
205 assert.Equal(t, 3, s.Len())
206 assert.Equal(t, newItems, s.Slice())
206 assert.Equal(t, newItems, s.Slice())
208 // Verify it's a copy
208 // Verify it's a copy
209 newItems[0] = 999
209 newItems[0] = 999
210 val, ok := s.Get(0)
210 val, ok := s.Get(0)
@@ -215,7 +215,7 @@ func TestSlice(t *testing.T) {
215 t.Run("Clear", func(t *testing.T) {
215 t.Run("Clear", func(t *testing.T) {
216 s := NewSliceFrom([]int{1, 2, 3})
216 s := NewSliceFrom([]int{1, 2, 3})
217 assert.Equal(t, 3, s.Len())
217 assert.Equal(t, 3, s.Len())
219 s.Clear()
219 s.Clear()
220 assert.Equal(t, 0, s.Len())
220 assert.Equal(t, 0, s.Len())
@@ -223,10 +223,10 @@ func TestSlice(t *testing.T) {
223 t.Run("Slice", func(t *testing.T) {
223 t.Run("Slice", func(t *testing.T) {
224 original := []int{1, 2, 3}
224 original := []int{1, 2, 3}
225 s := NewSliceFrom(original)
225 s := NewSliceFrom(original)
227 copy := s.Slice()
227 copy := s.Slice()
228 assert.Equal(t, original, copy)
228 assert.Equal(t, original, copy)
230 // Verify it's a copy
230 // Verify it's a copy
231 copy[0] = 999
231 copy[0] = 999
232 val, ok := s.Get(0)
232 val, ok := s.Get(0)
@@ -236,25 +236,25 @@ func TestSlice(t *testing.T) {
237 t.Run("Seq", func(t *testing.T) {
237 t.Run("Seq", func(t *testing.T) {
238 s := NewSliceFrom([]int{1, 2, 3})
238 s := NewSliceFrom([]int{1, 2, 3})
240 var result []int
240 var result []int
241 for v := range s.Seq() {
241 for v := range s.Seq() {
242 result = append(result, v)
242 result = append(result, v)
245 assert.Equal(t, []int{1, 2, 3}, result)
245 assert.Equal(t, []int{1, 2, 3}, result)
248 t.Run("SeqWithIndex", func(t *testing.T) {
248 t.Run("SeqWithIndex", func(t *testing.T) {
249 s := NewSliceFrom([]string{"a", "b", "c"})
249 s := NewSliceFrom([]string{"a", "b", "c"})
251 var indices []int
251 var indices []int
252 var values []string
252 var values []string
253 for i, v := range s.SeqWithIndex() {
253 for i, v := range s.SeqWithIndex() {
254 indices = append(indices, i)
254 indices = append(indices, i)
255 values = append(values, v)
255 values = append(values, v)
258 assert.Equal(t, []int{0, 1, 2}, indices)
258 assert.Equal(t, []int{0, 1, 2}, indices)
259 assert.Equal(t, []string{"a", "b", "c"}, values)
259 assert.Equal(t, []string{"a", "b", "c"}, values)
@@ -263,9 +263,9 @@ func TestSlice(t *testing.T) {
263 s := NewSlice[int]()
263 s := NewSlice[int]()
264 const numGoroutines = 100
264 const numGoroutines = 100
265 const itemsPerGoroutine = 10
265 const itemsPerGoroutine = 10
267 var wg sync.WaitGroup
267 var wg sync.WaitGroup
269 // Concurrent appends
269 // Concurrent appends
270 for i := 0; i < numGoroutines; i++ {
270 for i := 0; i < numGoroutines; i++ {
271 wg.Add(1)
271 wg.Add(1)
@@ -276,7 +276,7 @@ func TestSlice(t *testing.T) {
280 // Concurrent reads
280 // Concurrent reads
281 for i := 0; i < numGoroutines; i++ {
281 for i := 0; i < numGoroutines; i++ {
282 wg.Add(1)
282 wg.Add(1)
@@ -287,9 +287,9 @@ func TestSlice(t *testing.T) {
291 wg.Wait()
291 wg.Wait()
293 // Should have all items
293 // Should have all items
294 assert.Equal(t, numGoroutines*itemsPerGoroutine, s.Len())
294 assert.Equal(t, numGoroutines*itemsPerGoroutine, s.Len())