// Copyright (c) 2019 Alexander Medvednikov. All rights reserved.
// Use of this source code is governed by an MIT license
// that can be found in the LICENSE file.

import crypto.rand

fn test_crypto_rand_read() {
	no_bytes := 100
	max_percentage_diff := 20

	r1 := rand.read(no_bytes) or {
		assert false
		return
	}
	assert r1.len == no_bytes
	r2 := rand.read(no_bytes) or {
		assert false
		return
	}
	assert r2.len == no_bytes
	
	mut difference := 0
	for i, _ in r1 {
		difference += if r1[i] == r2[i] {0} else {1}
	}

	diff_percentage := f32(100) - (f32(difference)/f32(no_bytes)*100)

	assert diff_percentage <= max_percentage_diff
}

fn test_crypto_rand_int_u64() {
	max := u64(160)
	mut unique := []int
	for _ in 0..80 {
		r := rand.int_u64(max) or {
			assert false
			return
		}
		if r >= max {
			assert false
			return
		}
		n := int(r)
		if !(n in unique) {
			unique << n
		}
	}
	assert unique.len >= 40
}
