36 lines
		
	
	
		
			537 B
		
	
	
	
		
			V
		
	
	
			
		
		
	
	
			36 lines
		
	
	
		
			537 B
		
	
	
	
		
			V
		
	
	
| const (
 | |
| 	num_iterations = 10000
 | |
| )
 | |
| 
 | |
| struct St {
 | |
| mut:
 | |
| 	dummy  i64
 | |
| 	dummy2 u32
 | |
| 	dummy3 i64
 | |
| 	n      int
 | |
| 	dummy4 int
 | |
| }
 | |
| 
 | |
| // this function gets an array of channels for `St` references
 | |
| fn do_rec_calc_send(chs []chan mut St) {
 | |
| 	for {
 | |
| 		mut s := <-chs[0] or { break }
 | |
| 		s.n++
 | |
| 		chs[1] <- s
 | |
| 	}
 | |
| }
 | |
| 
 | |
| fn test_channel_array_mut() {
 | |
| 	mut chs := [chan mut St{cap: 1}, chan mut St{}]
 | |
| 	go do_rec_calc_send(chs)
 | |
| 	mut t := &St{
 | |
| 		n: 100
 | |
| 	}
 | |
| 	for _ in 0 .. num_iterations {
 | |
| 		chs[0] <- t
 | |
| 		t = <-chs[1]
 | |
| 	}
 | |
| 	chs[0].close()
 | |
| 	assert t.n == 100 + num_iterations
 | |
| }
 |