MCPcopy Create free account
hub / github.com/docknetwork/crypto / computing_d

Function computing_d

vb_accumulator/src/universal.rs:1085–1149  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

1083
1084 #[test]
1085 fn computing_d() {
1086 // Test computing `d` where `d = (member_0 - element)*(member_1 - element)*...(member_n - element)`
1087 // where each `member_i` is an accumulator member.
1088
1089 let mut rng = StdRng::seed_from_u64(0u64);
1090
1091 // Check that `d` computed for a single element (non-member) when all members are available is
1092 // same as when `d` is computed over chunks of members and then multiplied
1093 let members: Vec<Fr> = (0..10).map(|_| Fr::rand(&mut rng)).collect();
1094 let non_member = Fr::rand(&mut rng);
1095
1096 let d = UniversalAccumulator::<G1Affine>::compute_d_given_members(&non_member, &members);
1097
1098 let mut chunks = members.chunks(3);
1099 let d1 = UniversalAccumulator::<G1Affine>::compute_d_given_members(
1100 &non_member,
1101 chunks.next().unwrap(),
1102 );
1103 let d2 = UniversalAccumulator::<G1Affine>::compute_d_given_members(
1104 &non_member,
1105 chunks.next().unwrap(),
1106 );
1107 let d3 = UniversalAccumulator::<G1Affine>::compute_d_given_members(
1108 &non_member,
1109 chunks.next().unwrap(),
1110 );
1111 let d4 = UniversalAccumulator::<G1Affine>::compute_d_given_members(
1112 &non_member,
1113 chunks.next().unwrap(),
1114 );
1115 assert_eq!(d, d1 * d2 * d3 * d4);
1116
1117 // Check that `d` computed for a batch of elements (non-members) when all members are available is
1118 // same as when `d` is computed over chunks of members and then multiplied
1119 let non_members = vec![Fr::rand(&mut rng), Fr::rand(&mut rng), Fr::rand(&mut rng)];
1120 let d = UniversalAccumulator::<G1Affine>::compute_d_for_batch_given_members(
1121 &non_members,
1122 &members,
1123 );
1124
1125 let mut chunks = members.chunks(3);
1126 let d1 = UniversalAccumulator::<G1Affine>::compute_d_for_batch_given_members(
1127 &non_members,
1128 chunks.next().unwrap(),
1129 );
1130 let d2 = UniversalAccumulator::<G1Affine>::compute_d_for_batch_given_members(
1131 &non_members,
1132 chunks.next().unwrap(),
1133 );
1134 let d3 = UniversalAccumulator::<G1Affine>::compute_d_for_batch_given_members(
1135 &non_members,
1136 chunks.next().unwrap(),
1137 );
1138 let d4 = UniversalAccumulator::<G1Affine>::compute_d_for_batch_given_members(
1139 &non_members,
1140 chunks.next().unwrap(),
1141 );
1142 assert_eq!(d.len(), d1.len());

Callers

nothing calls this directly

Calls 4

randFunction · 0.85
mapMethod · 0.80
nextMethod · 0.80
lenMethod · 0.45

Tested by

no test coverage detected