MCPcopy Create free account
hub / github.com/ciphermodelabs/ciphercore / test_prf_output_value

Function test_prf_output_value

ciphercore-base/src/random.rs:521–616  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

519 }
520 #[test]
521 fn test_prf_output_value() {
522 let mut g = Prf::new(None).unwrap();
523 let mut helper = |t: Type| -> Result<()> {
524 let v1 = g.output_value(15, t.clone())?;
525 let v2 = g.output_value(15, t.clone())?;
526 assert!(v1.check_type(t.clone())?);
527 assert!(v2.check_type(t.clone())?);
528 assert_eq!(v1, v2);
529 if let Type::Tuple(_) | Type::Vector(_, _) | Type::NamedTuple(_) = t.clone() {
530 let values = v1.to_vector()?;
531 // check that not all values are equal
532 let mut all_equal = true;
533 for i in 1..values.len() {
534 all_equal &= values[i - 1] == values[i];
535 }
536 assert!(!all_equal);
537
538 // checks that all scalars contained in values are different
539 // this test passes with overwhelming probability only for UINT64 scalars
540 let mut numbers = vec![];
541 let types = get_types_vector(t)?;
542 for i in 0..types.len() {
543 let tp = (*types[i]).clone();
544 if !tp.is_array() {
545 return Ok(());
546 }
547 if tp.get_scalar_type() != UINT64 {
548 return Ok(());
549 }
550 let mut tmp = values[i].to_flattened_array_u64(tp)?;
551 numbers.append(&mut tmp)
552 }
553 let mut tmp_numbers = numbers.clone();
554 tmp_numbers.sort_unstable();
555 tmp_numbers.dedup();
556 assert_eq!(tmp_numbers.len(), numbers.len());
557 }
558 Ok(())
559 };
560 || -> Result<()> {
561 helper(scalar_type(BIT))?;
562 helper(scalar_type(UINT8))?;
563 helper(scalar_type(INT32))?;
564 helper(array_type(vec![3, 4], BIT))?;
565 helper(array_type(vec![4, 2], UINT8))?;
566 helper(array_type(vec![6, 2], INT32))?;
567 helper(tuple_type(vec![scalar_type(BIT), scalar_type(INT32)]))?;
568 helper(tuple_type(vec![
569 vector_type(3, scalar_type(BIT)),
570 vector_type(5, scalar_type(BIT)),
571 scalar_type(BIT),
572 scalar_type(INT32),
573 ]))?;
574 helper(tuple_type(vec![
575 scalar_type(INT32),
576 scalar_type(INT32),
577 scalar_type(INT32),
578 scalar_type(INT32),

Callers

nothing calls this directly

Calls 13

get_types_vectorFunction · 0.85
output_valueMethod · 0.80
cloneMethod · 0.80
is_arrayMethod · 0.80
access_bytesMethod · 0.80
is_emptyMethod · 0.80
scalar_typeFunction · 0.70
array_typeFunction · 0.70
tuple_typeFunction · 0.70
named_tuple_typeFunction · 0.70
to_vectorMethod · 0.45

Tested by

no test coverage detected