use super::*; use crate::utils::collections::Vec; use proptest::prelude::*; use rand_utils::rand_vector; #[test] fn blake3_hash_elements() { // test multiple of 8 let elements = rand_vector::(16); let expected = compute_expected_element_hash(&elements); let actual: [u8; 32] = hash_elements(&elements); assert_eq!(&expected, &actual); // test not multiple of 8 let elements = rand_vector::(17); let expected = compute_expected_element_hash(&elements); let actual: [u8; 32] = hash_elements(&elements); assert_eq!(&expected, &actual); } proptest! { #[test] fn blake160_wont_panic_with_arbitrary_input(ref vec in any::>()) { Blake3_160::hash(vec); } #[test] fn blake192_wont_panic_with_arbitrary_input(ref vec in any::>()) { Blake3_192::hash(vec); } #[test] fn blake256_wont_panic_with_arbitrary_input(ref vec in any::>()) { Blake3_256::hash(vec); } } // HELPER FUNCTIONS // ================================================================================================ fn compute_expected_element_hash(elements: &[Felt]) -> blake3::Hash { let mut bytes = Vec::new(); for element in elements.iter() { bytes.extend_from_slice(&element.as_int().to_le_bytes()); } blake3::hash(&bytes) }