@@ -557,6 +557,42 @@ void chain_test(void) {
557
557
equeue_dispatch (& q1 , 30 );
558
558
559
559
test_assert (touched == 6 );
560
+
561
+ equeue_destroy (& q1 );
562
+ equeue_destroy (& q2 );
563
+ }
564
+
565
+ void unchain_test (void ) {
566
+ equeue_t q1 ;
567
+ int err = equeue_create (& q1 , 2048 );
568
+ test_assert (!err );
569
+
570
+ equeue_t q2 ;
571
+ err = equeue_create (& q2 , 2048 );
572
+ test_assert (!err );
573
+
574
+ equeue_chain (& q2 , & q1 );
575
+
576
+ int touched = 0 ;
577
+ int id1 = equeue_call (& q1 , simple_func , & touched );
578
+ int id2 = equeue_call (& q2 , simple_func , & touched );
579
+ test_assert (id1 && id2 );
580
+
581
+ equeue_dispatch (& q1 , 0 );
582
+ test_assert (touched == 2 );
583
+
584
+ equeue_chain (& q2 , 0 );
585
+ equeue_chain (& q1 , & q2 );
586
+
587
+ id1 = equeue_call (& q1 , simple_func , & touched );
588
+ id2 = equeue_call (& q2 , simple_func , & touched );
589
+ test_assert (id1 && id2 );
590
+
591
+ equeue_dispatch (& q2 , 0 );
592
+ test_assert (touched == 4 );
593
+
594
+ equeue_destroy (& q1 );
595
+ equeue_destroy (& q2 );
560
596
}
561
597
562
598
// Barrage tests
@@ -671,6 +707,7 @@ int main() {
671
707
test_run (sloth_test );
672
708
test_run (background_test );
673
709
test_run (chain_test );
710
+ test_run (unchain_test );
674
711
test_run (multithread_test );
675
712
test_run (simple_barrage_test , 20 );
676
713
test_run (fragmenting_barrage_test , 20 );
0 commit comments