fn test_random_sampling()

in src/tests.rs [172:226]


    fn test_random_sampling(list: &[(TreeIndex, P)], tree: &SMT<P>) {
        let secret = &ALL_ZEROS_SECRET;
        // Test random sampling.

        // When the index looked up exists.
        for item in list.iter() {
            assert!(Tester::<P>::random_sampling(tree, &item.0));
        }

        // When no node exists.
        let empty_tree: SMT<P> = SMT::new(TREE_HEIGHT);
        assert!(Tester::<P>::random_sampling(&empty_tree, &list[0].0));

        // When the index looked up doesn't exist and left neighbour doesn't exist.
        let index = list[0].0.get_left_index();
        if let Some(index) = index {
            assert!(Tester::<P>::random_sampling(tree, &index));
            let proof = RandomSamplingProof::<P>::random_sampling(tree, &index, secret);
            assert_eq!(proof.get_merkle_proof().get_indexes().len(), 1);
            assert_eq!(proof.get_merkle_proof().get_indexes()[0], list[0].0);
        }

        // When the index looked up doesn't exist and right neighbour doesn't exist.
        let index = list[list.len() - 1].0.get_right_index();
        if let Some(index) = index {
            assert!(Tester::<P>::random_sampling(tree, &index));
            let proof = RandomSamplingProof::<P>::random_sampling(tree, &index, secret);
            assert_eq!(proof.get_merkle_proof().get_indexes().len(), 1);
            assert_eq!(
                proof.get_merkle_proof().get_indexes()[0],
                list[list.len() - 1].0
            );
        }

        // When the index looked up doesn't exist but both neighbours exist.
        for i in 1..list.len() {
            let index = list[i].0.get_left_index().unwrap();
            if index > list[i - 1].0 {
                assert!(Tester::<P>::random_sampling(tree, &index));
                let proof = RandomSamplingProof::<P>::random_sampling(tree, &index, secret);
                assert_eq!(proof.get_merkle_proof().get_indexes().len(), 2);
                assert_eq!(proof.get_merkle_proof().get_indexes()[0], list[i - 1].0);
                assert_eq!(proof.get_merkle_proof().get_indexes()[1], list[i].0);
            }

            let index = list[i - 1].0.get_right_index().unwrap();
            if index < list[i].0 {
                assert!(Tester::<P>::random_sampling(tree, &index));
                let proof = RandomSamplingProof::<P>::random_sampling(tree, &index, secret);
                assert_eq!(proof.get_merkle_proof().get_indexes().len(), 2);
                assert_eq!(proof.get_merkle_proof().get_indexes()[0], list[i - 1].0);
                assert_eq!(proof.get_merkle_proof().get_indexes()[1], list[i].0);
            }
        }
    }