1package fifo23import (4 "testing"56 "gno.land/p/nt/uassert/v0"7)89func TestNew(t *testing.T) {10 l := New(5)11 uassert.Equal(t, 5, l.MaxSize())12 uassert.Equal(t, 0, l.Size())13}1415func TestAppend(t *testing.T) {16 l := New(3)1718 // Test adding within capacity19 l.Append(1)20 l.Append(2)21 uassert.Equal(t, 2, l.Size())22 uassert.Equal(t, 1, l.Get(0))23 uassert.Equal(t, 2, l.Get(1))2425 // Test overflow behavior26 l.Append(3)27 l.Append(4)28 uassert.Equal(t, 3, l.Size())29 uassert.Equal(t, 2, l.Get(0))30 uassert.Equal(t, 3, l.Get(1))31 uassert.Equal(t, 4, l.Get(2))32}3334func TestPrepend(t *testing.T) {35 l := New(3)3637 // Test adding within capacity38 l.Prepend(1)39 l.Prepend(2)40 uassert.Equal(t, 2, l.Size())41 uassert.Equal(t, 2, l.Get(0))42 uassert.Equal(t, 1, l.Get(1))4344 // Test overflow behavior45 l.Prepend(3)46 l.Prepend(4)47 uassert.Equal(t, 3, l.Size())48 uassert.Equal(t, 4, l.Get(0))49 uassert.Equal(t, 3, l.Get(1))50 uassert.Equal(t, 2, l.Get(2))51}5253func TestGet(t *testing.T) {54 l := New(3)55 l.Append(1)56 l.Append(2)57 l.Append(3)5859 // Test valid indices60 uassert.Equal(t, 1, l.Get(0))61 uassert.Equal(t, 2, l.Get(1))62 uassert.Equal(t, 3, l.Get(2))6364 // Test invalid indices65 uassert.True(t, l.Get(-1) == nil)66 uassert.True(t, l.Get(3) == nil)67}6869func TestEntries(t *testing.T) {70 l := New(3)71 l.Append(1)72 l.Append(2)73 l.Append(3)7475 entries := l.Entries()76 uassert.Equal(t, 3, len(entries))77 uassert.Equal(t, 1, entries[0])78 uassert.Equal(t, 2, entries[1])79 uassert.Equal(t, 3, entries[2])80}8182func TestLatest(t *testing.T) {83 l := New(5)8485 // Test empty list86 uassert.True(t, l.Latest() == nil)8788 // Test single entry89 l.Append(1)90 uassert.Equal(t, 1, l.Latest())9192 // Test multiple entries93 l.Append(2)94 l.Append(3)95 uassert.Equal(t, 3, l.Latest())9697 // Test after overflow98 l.Append(4)99 l.Append(5)100 l.Append(6)101 uassert.Equal(t, 6, l.Latest())102}103104func TestIterator(t *testing.T) {105 l := New(3)106 l.Append(1)107 l.Append(2)108 l.Append(3)109110 iter := l.Iterator()111 uassert.Equal(t, 1, iter())112 uassert.Equal(t, 2, iter())113 uassert.Equal(t, 3, iter())114 uassert.True(t, iter() == nil)115}116117func TestMixedOperations(t *testing.T) {118 l := New(3)119120 // Mix of append and prepend operations121 l.Append(1) // [1]122 l.Prepend(2) // [2,1]123 l.Append(3) // [2,1,3]124 l.Prepend(4) // [4,2,1]125126 entries := l.Entries()127 uassert.Equal(t, 3, len(entries))128 uassert.Equal(t, 4, entries[0])129 uassert.Equal(t, 2, entries[1])130 uassert.Equal(t, 1, entries[2])131}132133func TestEmptyList(t *testing.T) {134 l := New(3)135136 // Test operations on empty list137 uassert.Equal(t, 0, l.Size())138 uassert.True(t, l.Get(0) == nil)139 uassert.Equal(t, 0, len(l.Entries()))140 uassert.True(t, l.Latest() == nil)141142 iter := l.Iterator()143 uassert.True(t, iter() == nil)144}145146func TestEdgeCases(t *testing.T) {147 // Test zero-size list148 l := New(0)149 uassert.Equal(t, 0, l.MaxSize())150 l.Append(1) // Should be no-op151 uassert.Equal(t, 0, l.Size())152153 // Test single-element list154 l = New(1)155 l.Append(1)156 l.Append(2) // Should replace 1157 uassert.Equal(t, 1, l.Size())158 uassert.Equal(t, 2, l.Latest())159160 // Test rapid append/prepend alternation161 l = New(3)162 l.Append(1) // [1]163 l.Prepend(2) // [2,1]164 l.Append(3) // [2,1,3]165 l.Prepend(4) // [4,2,1]166 l.Append(5) // [2,1,5]167 uassert.Equal(t, 3, l.Size())168 entries := l.Entries()169 uassert.Equal(t, 2, entries[0])170 uassert.Equal(t, 1, entries[1])171 uassert.Equal(t, 5, entries[2])172173 // Test nil values174 l = New(2)175 l.Append(nil)176 l.Prepend(nil)177 uassert.Equal(t, 2, l.Size())178 uassert.True(t, l.Get(0) == nil)179 uassert.True(t, l.Get(1) == nil)180181 // Test index bounds182 l = New(3)183 l.Append(1)184 uassert.True(t, l.Get(-1) == nil)185 uassert.True(t, l.Get(1) == nil)186187 // Test iterator exhaustion188 l = New(2)189 l.Append(1)190 l.Append(2)191 iter := l.Iterator()192 uassert.Equal(t, 1, iter())193 uassert.Equal(t, 2, iter())194 uassert.True(t, iter() == nil)195 uassert.True(t, iter() == nil)196197 // Test prepend on full list198 l = New(2)199 l.Append(1)200 l.Append(2) // [1,2]201 l.Prepend(3) // [3,1]202 uassert.Equal(t, 2, l.Size())203 entries = l.Entries()204 uassert.Equal(t, 3, entries[0])205 uassert.Equal(t, 1, entries[1])206}207208func TestSetMaxSize(t *testing.T) {209 l := New(5)210211 // Fill the list212 l.Append(1)213 l.Append(2)214 l.Append(3)215 l.Append(4)216 l.Append(5)217218 // Test increasing maxSize219 l.SetMaxSize(7)220 uassert.Equal(t, 7, l.MaxSize())221 uassert.Equal(t, 5, l.Size())222223 // Test reducing maxSize224 l.SetMaxSize(3)225 uassert.Equal(t, 3, l.Size())226 entries := l.Entries()227 uassert.Equal(t, 3, entries[0])228 uassert.Equal(t, 4, entries[1])229 uassert.Equal(t, 5, entries[2])230231 // Test setting to zero232 l.SetMaxSize(0)233 uassert.Equal(t, 0, l.Size())234 uassert.True(t, l.head == nil)235 uassert.True(t, l.tail == nil)236237 // Test negative maxSize238 l.SetMaxSize(-1)239 uassert.Equal(t, 0, l.MaxSize())240241 // Test setting back to positive242 l.SetMaxSize(2)243 l.Append(1)244 l.Append(2)245 l.Append(3)246 uassert.Equal(t, 2, l.Size())247 entries = l.Entries()248 uassert.Equal(t, 2, entries[0])249 uassert.Equal(t, 3, entries[1])250}251252func TestDelete(t *testing.T) {253 l := New(5)254255 // Test delete on empty list256 uassert.False(t, l.Delete(0))257 uassert.False(t, l.Delete(-1))258259 // Fill list260 l.Append(1)261 l.Append(2)262 l.Append(3)263 l.Append(4)264265 // Test invalid indices266 uassert.False(t, l.Delete(-1))267 uassert.False(t, l.Delete(4))268269 // Test deleting from middle270 uassert.True(t, l.Delete(1))271 uassert.Equal(t, 3, l.Size())272 entries := l.Entries()273 uassert.Equal(t, 1, entries[0])274 uassert.Equal(t, 3, entries[1])275 uassert.Equal(t, 4, entries[2])276277 // Test deleting from head278 uassert.True(t, l.Delete(0))279 uassert.Equal(t, 2, l.Size())280 entries = l.Entries()281 uassert.Equal(t, 3, entries[0])282 uassert.Equal(t, 4, entries[1])283284 // Test deleting from tail285 uassert.True(t, l.Delete(1))286 uassert.Equal(t, 1, l.Size())287 uassert.Equal(t, 3, l.Latest())288289 // Test deleting last element290 uassert.True(t, l.Delete(0))291 uassert.Equal(t, 0, l.Size())292 uassert.True(t, l.head == nil)293 uassert.True(t, l.tail == nil)294}295Signatures reconstructed verbatim from vm/qfuncs — interface params keep their inline definitions.