@@ -273,7 +273,7 @@ func TestLongRunningWindow(t *testing.T) {
273
273
}
274
274
}
275
275
276
- func TestLongRunningJumps (t * testing.T ) {
276
+ func TestLongRunningBackwardDuplicates (t * testing.T ) {
277
277
278
278
type test struct {
279
279
aw uint16
@@ -382,6 +382,90 @@ func TestLongRunningJumps(t *testing.T) {
382
382
}
383
383
}
384
384
385
+ func TestLongRunningSkipSend (t * testing.T ) {
386
+
387
+ type test struct {
388
+ aw uint16
389
+ bw uint16
390
+ ab uint16
391
+ bb uint16
392
+ dl int
393
+ start uint16
394
+ err error
395
+ loops int64
396
+ SkipMod int
397
+ MaxSkip int
398
+ Len int
399
+ }
400
+
401
+ debugL := 11
402
+
403
+ tests := []test {
404
+ {10 , 10 , 10 , 10 , debugL , 0 , nil , 10 , 2 , 3 , 10 },
405
+ {10 , 10 , 10 , 10 , debugL , 0 , nil , 10 , 3 , 3 , 10 },
406
+ {10 , 10 , 10 , 10 , debugL , maxUint16 - 10 , nil , 10 , 5 , 3 , 10 },
407
+ {100 , 100 , 100 , 100 , debugL , 0 , nil , 100 , 2 , 3 , 100 },
408
+ {100 , 100 , 100 , 100 , debugL , 0 , nil , 100 , 3 , 3 , 100 },
409
+ {100 , 100 , 100 , 100 , debugL , maxUint16 - 100 , nil , 100 , 5 , 3 , 100 },
410
+ {1000 , 1000 , 1000 , 1000 , debugL , 0 , nil , 1000 , 10 , 2 , 1000 },
411
+ {1000 , 1000 , 1000 , 1000 , debugL , 0 , nil , 1000 , 20 , 3 , 1000 },
412
+ {1000 , 1000 , 1000 , 1000 , debugL , maxUint16 - 1000 , nil , 1000 , 50 , 10 , 1000 },
413
+ }
414
+
415
+ if os .Getenv ("LONG" ) != "true" {
416
+ t .Skip ("Skipping long test. Set 'LONG=true' env var to run this" )
417
+ }
418
+
419
+ for i , tc := range tests {
420
+
421
+ t .Logf ("%s i:%d, tc: %v\n " , t .Name (), i , tc )
422
+
423
+ tr , err := New (tc .aw , tc .bw , tc .ab , tc .bb , tc .dl )
424
+ if err != tc .err {
425
+ t .Fatalf ("%s, err:%v != tc.err:%v" , t .Name (), err , tc .err )
426
+ }
427
+
428
+ var tax * Taxonomy
429
+ var e error
430
+ var loops int64
431
+ var j uint16 = tc .start
432
+ var skip int
433
+ for {
434
+ if tc .dl > 10 {
435
+ t .Logf ("%s i:%d, tc: %v, j:%d, loops:%d" , t .Name (), i , tc , j , loops )
436
+ }
437
+ if loops % int64 (tc .SkipMod ) == 0 && skip < tc .MaxSkip {
438
+ t .Logf ("%s i:%d, loops:%d, j:%d, skip:%d" , t .Name (), i , loops , j , skip )
439
+ skip ++
440
+ } else {
441
+ tax , e = tr .PacketArrival (j )
442
+ if e != nil {
443
+ t .Fatalf ("%s, e != nil:%v" , t .Name (), e )
444
+ }
445
+ }
446
+
447
+ j ++
448
+ loops ++
449
+ if loops > tc .loops {
450
+ t .Logf ("loops:%d > tc.Loops:%d, tr.Max():%d, tax.Len:%d, tr.Min():%d" , loops , tc .loops , tr .Max (), tax .Len , tr .Min ())
451
+ if tc .dl > 110 {
452
+ t .Logf ("items:%v" , tr .itemsDescending ())
453
+ }
454
+ break
455
+ }
456
+
457
+ if tc .dl > 10 {
458
+ if loops % int64 (maxUint16 ) == 0 {
459
+ t .Logf ("loops:%d > tc.Loops:%d, tr.Max():%d, tax.Len:%d, tr.Min():%d" , loops , tc .loops , tr .Max (), tax .Len , tr .Min ())
460
+ }
461
+ }
462
+ }
463
+ if ! reflect .DeepEqual (tax .Len - 1 , tc .Len - skip ) {
464
+ t .Fatalf ("%s, test:%d !reflect.DeepEqual(tax.Len-1:%v, tc.Len:%v), skip:%d" , t .Name (), i , tax .Len - 1 , tc .Len - skip , skip )
465
+ }
466
+ }
467
+ }
468
+
385
469
//go:linkname FastRand runtime.fastrand
386
470
func FastRand () uint32
387
471
0 commit comments