1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
#![allow(unused)]
#![allow(clippy::eq_op)]
use ark_ec::group::Group;
use ark_ff::{One, UniformRand, Zero};
pub fn group_test<G: Group>(a: G, mut b: G) {
let mut rng = ark_std::test_rng();
let zero = G::zero();
let fr_zero = G::ScalarField::zero();
let fr_one = G::ScalarField::one();
let fr_two = fr_one + &fr_one;
assert_eq!(zero, zero);
assert_eq!(zero.is_zero(), true);
assert_eq!(a.mul(&fr_one), a);
assert_eq!(a.mul(&fr_two), a + &a);
assert_eq!(a.mul(&fr_zero), zero);
assert_eq!(a.mul(&fr_zero) - &a, -a);
assert_eq!(a.mul(&fr_one) - &a, zero);
assert_eq!(a.mul(&fr_two) - &a, a);
assert_eq!(a, a);
assert_eq!(a + &zero, a);
assert_eq!(a - &zero, a);
assert_eq!(a - &a, zero);
assert_eq!(zero - &a, -a);
assert_eq!(a.double(), a + &a);
assert_eq!(b.double(), b + &b);
assert_eq!(a + &b, b + &a);
assert_eq!(a - &b, -(b - &a));
assert_eq!((a + &b) + &a, a + &(b + &a));
assert_eq!((a + &b).double(), (a + &b) + &(b + &a));
let original_b = b;
b.double_in_place();
assert_eq!(original_b.double(), b);
let fr_rand1 = G::ScalarField::rand(&mut rng);
let fr_rand2 = G::ScalarField::rand(&mut rng);
let a_rand1 = a.mul(&fr_rand1);
let a_rand2 = a.mul(&fr_rand2);
let fr_three = fr_two + &fr_rand1;
let a_two = a.mul(&fr_two);
assert_eq!(a_two, a.double(), "(a * 2) != a.double()");
let a_six = a.mul(&(fr_three * &fr_two));
assert_eq!(a_two.mul(&fr_three), a_six, "(a * 2) * 3 != a * (2 * 3)");
assert_eq!(
a_rand1.mul(&fr_rand2),
a_rand2.mul(&fr_rand1),
"(a * r1) * r2 != (a * r2) * r1"
);
assert_eq!(
a_rand2.mul(&fr_rand1),
a.mul(&(fr_rand1 * &fr_rand2)),
"(a * r2) * r1 != a * (r1 * r2)"
);
assert_eq!(
a_rand1.mul(&fr_rand2),
a.mul(&(fr_rand1 * &fr_rand2)),
"(a * r1) * r2 != a * (r1 * r2)"
);
}