| 710 | |
| 711 | #[test] |
| 712 | fn test_zip() { |
| 713 | const N_BITS: u32 = 1450; |
| 714 | const N_U30_LIMBS: u32 = 50; |
| 715 | |
| 716 | let mut prng = ChaCha20Rng::seed_from_u64(0); |
| 717 | |
| 718 | for _ in 0..50 { |
| 719 | let mut v = vec![]; |
| 720 | for _ in 0..N_U30_LIMBS { |
| 721 | v.push(prng.gen::<i32>()); |
| 722 | } |
| 723 | for _ in 0..N_U30_LIMBS { |
| 724 | v.push(prng.gen::<i32>()); |
| 725 | } |
| 726 | |
| 727 | let mut expected = vec![]; |
| 728 | for i in 0..N_U30_LIMBS { |
| 729 | expected.push(v[i as usize]); |
| 730 | expected.push(v[(N_U30_LIMBS + i) as usize]); |
| 731 | } |
| 732 | |
| 733 | let script = script! { |
| 734 | for i in 0..N_U30_LIMBS * 2 { |
| 735 | { v[i as usize] } |
| 736 | } |
| 737 | { BigIntImpl::<N_BITS, 29>::zip(1, 0) } |
| 738 | for i in 0..N_U30_LIMBS * 2 { |
| 739 | { expected[(N_U30_LIMBS * 2 - 1 - i) as usize] } |
| 740 | OP_EQUALVERIFY |
| 741 | } |
| 742 | OP_TRUE |
| 743 | }; |
| 744 | run(script); |
| 745 | } |
| 746 | |
| 747 | for _ in 0..50 { |
| 748 | let mut v = vec![]; |
| 749 | for _ in 0..N_U30_LIMBS { |
| 750 | v.push(prng.gen::<i32>()); |
| 751 | } |
| 752 | for _ in 0..N_U30_LIMBS { |
| 753 | v.push(prng.gen::<i32>()); |
| 754 | } |
| 755 | |
| 756 | let mut expected = vec![]; |
| 757 | for i in 0..N_U30_LIMBS { |
| 758 | expected.push(v[(N_U30_LIMBS + i) as usize]); |
| 759 | expected.push(v[i as usize]); |
| 760 | } |
| 761 | |
| 762 | let script = script! { |
| 763 | for i in 0..N_U30_LIMBS * 2 { |
| 764 | { v[i as usize] } |
| 765 | } |
| 766 | { BigIntImpl::<N_BITS, 29>::zip(0, 1) } |
| 767 | for i in 0..N_U30_LIMBS * 2 { |
| 768 | { expected[(N_U30_LIMBS * 2 - 1 - i) as usize] } |
| 769 | OP_EQUALVERIFY |