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