42 lines
		
	
	
		
			680 B
		
	
	
	
		
			V
		
	
	
			
		
		
	
	
			42 lines
		
	
	
		
			680 B
		
	
	
	
		
			V
		
	
	
| module sync
 | |
| 
 | |
| import time
 | |
| 
 | |
| fn test_waitgroup_reuse() {
 | |
| 	mut wg := new_waitgroup()
 | |
| 
 | |
| 	wg.add(1)
 | |
| 	wg.done()
 | |
| 
 | |
| 	wg.add(1)
 | |
| 	mut executed := false
 | |
| 	go fn (mut wg WaitGroup, executed voidptr) {
 | |
| 		defer {
 | |
| 			wg.done()
 | |
| 		}
 | |
| 		unsafe {
 | |
| 			*(&bool(executed)) = true
 | |
| 		}
 | |
| 		time.sleep(100 * time.millisecond)
 | |
| 		assert wg.wait_count == 1
 | |
| 	}(mut wg, voidptr(&executed))
 | |
| 
 | |
| 	wg.wait()
 | |
| 	assert executed
 | |
| 	assert wg.wait_count == 0
 | |
| }
 | |
| 
 | |
| fn test_waitgroup_no_use() {
 | |
| 	mut done := false
 | |
| 	go fn (done voidptr) {
 | |
| 		time.sleep(1 * time.second)
 | |
| 		if *(&bool(done)) == false {
 | |
| 			panic('test_waitgroup_no_use did not complete in time')
 | |
| 		}
 | |
| 	}(voidptr(&done))
 | |
| 
 | |
| 	mut wg := new_waitgroup()
 | |
| 	wg.wait()
 | |
| 	done = true
 | |
| }
 |