tests: make test more tolerant to windows low precision timer default interval
							parent
							
								
									e0ed224a8d
								
							
						
					
					
						commit
						ea11488339
					
				| 
						 | 
					@ -21,7 +21,9 @@ fn f1(ch1 chan int, ch2 chan St, ch3 chan int, ch4 chan int, ch5 chan int, sem s
 | 
				
			||||||
		ch3 <- 5 {
 | 
							ch3 <- 5 {
 | 
				
			||||||
			a = 1
 | 
								a = 1
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		ch2 <- St{a: 37} {
 | 
							ch2 <- St{
 | 
				
			||||||
 | 
								a: 37
 | 
				
			||||||
 | 
							} {
 | 
				
			||||||
			a = 2
 | 
								a = 2
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		ch4 <- (6 + 7 * 9) {
 | 
							ch4 <- (6 + 7 * 9) {
 | 
				
			||||||
| 
						 | 
					@ -67,7 +69,7 @@ fn test_select_blocks() {
 | 
				
			||||||
	sem := sync.new_semaphore()
 | 
						sem := sync.new_semaphore()
 | 
				
			||||||
	mut r := false
 | 
						mut r := false
 | 
				
			||||||
	t := select {
 | 
						t := select {
 | 
				
			||||||
		b := <- ch1 {
 | 
							b := <-ch1 {
 | 
				
			||||||
			println(b)
 | 
								println(b)
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		else {
 | 
							else {
 | 
				
			||||||
| 
						 | 
					@ -80,20 +82,26 @@ fn test_select_blocks() {
 | 
				
			||||||
	go f2(ch2, ch3, sem)
 | 
						go f2(ch2, ch3, sem)
 | 
				
			||||||
	n := <-ch3
 | 
						n := <-ch3
 | 
				
			||||||
	assert n == 23
 | 
						assert n == 23
 | 
				
			||||||
	ch2 <- St{a: 13}
 | 
						ch2 <- St{
 | 
				
			||||||
 | 
							a: 13
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
	sem.wait()
 | 
						sem.wait()
 | 
				
			||||||
	stopwatch := time.new_stopwatch({})
 | 
						stopwatch := time.new_stopwatch({})
 | 
				
			||||||
	go f1(ch1, ch2, ch3, ch4, ch5, sem)
 | 
						go f1(ch1, ch2, ch3, ch4, ch5, sem)
 | 
				
			||||||
	sem.wait()
 | 
						sem.wait()
 | 
				
			||||||
	elapsed_ms := f64(stopwatch.elapsed()) / time.millisecond
 | 
						elapsed_ms := f64(stopwatch.elapsed()) / time.millisecond
 | 
				
			||||||
	assert elapsed_ms >= 295.0
 | 
						// https://docs.microsoft.com/en-us/windows-hardware/drivers/kernel/high-resolution-timers
 | 
				
			||||||
 | 
						// > For example, for Windows running on an x86 processor, the default interval between 
 | 
				
			||||||
 | 
						// > system clock ticks is typically about 15 milliseconds, and the minimum interval 
 | 
				
			||||||
 | 
						// > between system clock ticks is about 1 millisecond.
 | 
				
			||||||
 | 
						assert elapsed_ms >= 280.0 // 300 - (15ms + 5ms just in case)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	ch1.close()
 | 
						ch1.close()
 | 
				
			||||||
	ch2.close()
 | 
						ch2.close()
 | 
				
			||||||
	mut h := 7
 | 
						mut h := 7
 | 
				
			||||||
	mut is_open := true
 | 
						mut is_open := true
 | 
				
			||||||
	if select {
 | 
						if select {
 | 
				
			||||||
		b := <- ch2 {
 | 
							_ := <-ch2 {
 | 
				
			||||||
			h = 0
 | 
								h = 0
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		ch1 <- h {
 | 
							ch1 <- h {
 | 
				
			||||||
| 
						 | 
					@ -112,5 +120,3 @@ fn test_select_blocks() {
 | 
				
			||||||
	// since all channels are closed `select` should return `false`
 | 
						// since all channels are closed `select` should return `false`
 | 
				
			||||||
	assert is_open == false
 | 
						assert is_open == false
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					 | 
				
			||||||
			
 | 
					 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue