| 277 | } |
| 278 | |
| 279 | func TestRanges(t *testing.T) { |
| 280 | c := newClient(t) |
| 281 | allItems := make([]StreamItem, 0, 30) |
| 282 | key := "x1" |
| 283 | |
| 284 | for i := 0; i < 30; i++ { |
| 285 | fields := map[string]Value{"i": IntValue{int64(i)}} |
| 286 | insertedID, err := c.XADD(key, XAutoID, fields) |
| 287 | |
| 288 | allItems = append(allItems, StreamItem{ID: insertedID, Fields: map[string]ReturnValue{"i": {IntValue{int64(i)}.ToAV()}}}) |
| 289 | |
| 290 | assert.NoError(t, err) |
| 291 | } |
| 292 | |
| 293 | r1, err := c.XRANGE(key, XStart, XEnd, 5) |
| 294 | assert.NoError(t, err) |
| 295 | assert.Equal(t, allItems[0:5], r1) |
| 296 | |
| 297 | r2, err := c.XRANGE(key, r1[len(r1)-1].ID.Next(), XEnd, 5) |
| 298 | assert.NoError(t, err) |
| 299 | assert.Equal(t, allItems[5:10], r2) |
| 300 | |
| 301 | reverse := func(a []StreamItem) []StreamItem { |
| 302 | for left, right := 0, len(a)-1; left < right; left, right = left+1, right-1 { |
| 303 | a[left], a[right] = a[right], a[left] |
| 304 | } |
| 305 | |
| 306 | return a |
| 307 | } |
| 308 | |
| 309 | rr1, err := c.XREVRANGE(key, XEnd, XStart, 5) |
| 310 | lastFetchedItemID := rr1[len(rr1)-1].ID |
| 311 | |
| 312 | assert.NoError(t, err) |
| 313 | assert.Equal(t, allItems[25:30], reverse(rr1)) |
| 314 | |
| 315 | rr2, err := c.XREVRANGE(key, lastFetchedItemID.Prev(), XStart, 5) |
| 316 | assert.NoError(t, err) |
| 317 | assert.Equal(t, allItems[20:25], reverse(rr2)) |
| 318 | } |