()
| 710 | |
| 711 | #[test] |
| 712 | fn test_chunk_dense_dense_mul() { |
| 713 | let mut prng = ChaCha20Rng::seed_from_u64(0); |
| 714 | let f = ark_bn254::Fq12::rand(&mut prng); |
| 715 | let f_n = ark_bn254::Fq12::new(ark_bn254::Fq6::ONE, f.c1 / f.c0); |
| 716 | |
| 717 | let g = ark_bn254::Fq12::rand(&mut prng); |
| 718 | let g_n = ark_bn254::Fq12::new(ark_bn254::Fq6::ONE, g.c1 / g.c0); |
| 719 | |
| 720 | let h = f_n * g_n; |
| 721 | let h_n = ark_bn254::Fq12::new(ark_bn254::Fq6::ONE, h.c1 / h.c0); |
| 722 | |
| 723 | let (hint_out, is_valid_input, h_scr, mul_hints) = chunk_dense_dense_mul(f_n.c1, g_n.c1); |
| 724 | assert_eq!(h_n.c1, hint_out); |
| 725 | |
| 726 | let f_n_c1 = DataType::Fp6Data(f_n.c1); |
| 727 | let g_n_c1 = DataType::Fp6Data(g_n.c1); |
| 728 | let h_n_c1 = DataType::Fp6Data(h_n.c1); |
| 729 | let hint_out = DataType::Fp6Data(hint_out); |
| 730 | |
| 731 | let mut preimage_hints = vec![]; |
| 732 | let f6_hints = f_n_c1.to_witness(ElementType::Fp6); |
| 733 | let g6_hints = g_n_c1.to_witness(ElementType::Fp6); |
| 734 | let h6_hints = h_n_c1.to_witness(ElementType::Fp6); |
| 735 | preimage_hints.extend_from_slice(&f6_hints); |
| 736 | preimage_hints.extend_from_slice(&g6_hints); |
| 737 | preimage_hints.extend_from_slice(&h6_hints); |
| 738 | |
| 739 | let bitcom_scr = script! { |
| 740 | {hint_out.to_hash().as_hint_type().push()} |
| 741 | {Fq::toaltstack()} |
| 742 | {g_n_c1.to_hash().as_hint_type().push()} |
| 743 | {Fq::toaltstack()} |
| 744 | {f_n_c1.to_hash().as_hint_type().push()} |
| 745 | {Fq::toaltstack()} |
| 746 | }; |
| 747 | |
| 748 | let hash_scr = script! { |
| 749 | {hash_messages(vec![ElementType::Fp6, ElementType::Fp6, ElementType::Fp6])} |
| 750 | OP_TRUE |
| 751 | }; |
| 752 | |
| 753 | let tap_len = h_scr.len() + hash_scr.len(); |
| 754 | let scr = script! { |
| 755 | for h in mul_hints { |
| 756 | {h.push()} |
| 757 | } |
| 758 | for h in preimage_hints { |
| 759 | {h.push()} |
| 760 | } |
| 761 | {bitcom_scr} |
| 762 | {h_scr} |
| 763 | {hash_scr} |
| 764 | }; |
| 765 | let res = execute_script(scr); |
| 766 | if res.final_stack.len() > 1 { |
| 767 | for i in 0..res.final_stack.len() { |
| 768 | println!("{i:} {:?}", res.final_stack.get(i)); |
| 769 | } |
nothing calls this directly
no test coverage detected