58 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			V
		
	
	
			
		
		
	
	
			58 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			V
		
	
	
import rand
 | 
						|
import rand.util
 | 
						|
 | 
						|
fn test_sample_nr() {
 | 
						|
	lengths := [1, 3, 4, 5, 6, 7]
 | 
						|
	a := ['one', 'two', 'three', 'four', 'five', 'six', 'seven']
 | 
						|
	for length in lengths {
 | 
						|
		b := util.sample_nr(a, length)
 | 
						|
		assert b.len == length
 | 
						|
		for element in b {
 | 
						|
			assert element in a
 | 
						|
			// make sure every element occurs once
 | 
						|
			mut count := 0
 | 
						|
			for e in b {
 | 
						|
				if e == element {
 | 
						|
					count++
 | 
						|
				}
 | 
						|
			}
 | 
						|
			assert count == 1
 | 
						|
		}
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
fn test_sample_r() {
 | 
						|
	k := 20
 | 
						|
	a := ['heads', 'tails']
 | 
						|
	b := util.sample_r(a, k)
 | 
						|
	assert b.len == k
 | 
						|
	for element in b {
 | 
						|
		assert element in a
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
fn test_shuffle() {
 | 
						|
	rand.seed([u32(1), 2]) // set seed to produce same results in order
 | 
						|
	a := [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
 | 
						|
	mut b := a.clone()
 | 
						|
	mut c := a.clone()
 | 
						|
	util.shuffle(mut b, 0)
 | 
						|
	util.shuffle(mut c, 0)
 | 
						|
	assert b == [6, 4, 5, 1, 9, 2, 10, 3, 8, 7]
 | 
						|
	assert c == [1, 6, 5, 8, 7, 2, 10, 9, 3, 4]
 | 
						|
	// test shuffling a slice
 | 
						|
	mut d := a.clone()
 | 
						|
	util.shuffle(mut d[..5], 0)
 | 
						|
	assert d == [5, 2, 1, 3, 4, 6, 7, 8, 9, 10]
 | 
						|
	assert d[5..] == a[5..]
 | 
						|
	// test shuffling n items
 | 
						|
	mut e := a.clone()
 | 
						|
	util.shuffle(mut e, 5)
 | 
						|
	assert e[..5] == [10, 3, 1, 8, 4]
 | 
						|
	assert e[5..] == [6, 7, 5, 9, 2]
 | 
						|
	// test shuffling empty array
 | 
						|
	mut f := a[..0]
 | 
						|
	util.shuffle(mut f, 0)
 | 
						|
	assert f == []int{}
 | 
						|
}
 |