aboutsummaryrefslogtreecommitdiff
path: root/v_windows/v/old/vlib/sync/channel_select_4_test.v
diff options
context:
space:
mode:
Diffstat (limited to 'v_windows/v/old/vlib/sync/channel_select_4_test.v')
-rw-r--r--v_windows/v/old/vlib/sync/channel_select_4_test.v43
1 files changed, 43 insertions, 0 deletions
diff --git a/v_windows/v/old/vlib/sync/channel_select_4_test.v b/v_windows/v/old/vlib/sync/channel_select_4_test.v
new file mode 100644
index 0000000..77cd557
--- /dev/null
+++ b/v_windows/v/old/vlib/sync/channel_select_4_test.v
@@ -0,0 +1,43 @@
+fn do_rec_i64(ch chan i64, sumch chan i64) {
+ mut sum := i64(0)
+ for _ in 0 .. 30000 {
+ sum += <-ch
+ }
+ sumch <- sum
+}
+
+fn do_send_int(ch chan int) {
+ for i in 0 .. 30000 {
+ ch <- i
+ }
+}
+
+fn test_select() {
+ chi := chan int{cap: 10}
+ recch := chan i64{cap: 10}
+ chsum := chan i64{}
+ go do_rec_i64(recch, chsum)
+ go do_send_int(chi)
+ mut sum := i64(0)
+ mut sl := i64(0)
+ for _ in 0 .. 60000 + recch.cap {
+ select {
+ ri := <-chi {
+ sum += ri
+ }
+ recch <- sl {
+ sl++
+ }
+ }
+ }
+ // Use Gauß' formula
+ expected_sum := i64(30000) * (30000 - 1) / 2
+ assert sum == expected_sum
+
+ mut sumrec := <-chsum
+ // Empty receive buffer
+ for _ in 0 .. recch.cap {
+ sumrec += <-recch
+ }
+ assert sumrec == i64(30000 + recch.cap) * (30000 + recch.cap - 1) / 2
+}