Allow linear combinations to be added together.
This commit is contained in:
parent
70a588ceee
commit
dc981e6abc
@ -6,7 +6,7 @@ homepage = "https://github.com/ebfull/bellman"
|
|||||||
license = "MIT/Apache-2.0"
|
license = "MIT/Apache-2.0"
|
||||||
name = "bellman"
|
name = "bellman"
|
||||||
repository = "https://github.com/ebfull/bellman"
|
repository = "https://github.com/ebfull/bellman"
|
||||||
version = "0.0.6"
|
version = "0.0.7"
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
rand = "0.3"
|
rand = "0.3"
|
||||||
|
37
src/lib.rs
37
src/lib.rs
@ -57,6 +57,30 @@ impl<T, E: Engine> Sub<T> for LinearCombination<T, E> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl<'a, T: Copy, E: Engine> Add<&'a LinearCombination<T, E>> for LinearCombination<T, E> {
|
||||||
|
type Output = LinearCombination<T, E>;
|
||||||
|
|
||||||
|
fn add(mut self, other: &'a LinearCombination<T, E>) -> LinearCombination<T, E> {
|
||||||
|
for s in &other.0 {
|
||||||
|
self = self + (s.1, s.0);
|
||||||
|
}
|
||||||
|
|
||||||
|
self
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<'a, T: Copy, E: Engine> Sub<&'a LinearCombination<T, E>> for LinearCombination<T, E> {
|
||||||
|
type Output = LinearCombination<T, E>;
|
||||||
|
|
||||||
|
fn sub(mut self, other: &'a LinearCombination<T, E>) -> LinearCombination<T, E> {
|
||||||
|
for s in &other.0 {
|
||||||
|
self = self - (s.1, s.0);
|
||||||
|
}
|
||||||
|
|
||||||
|
self
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn test_lc() {
|
fn test_lc() {
|
||||||
use pairing::bls12_381::{Bls12, Fr};
|
use pairing::bls12_381::{Bls12, Fr};
|
||||||
@ -67,6 +91,19 @@ fn test_lc() {
|
|||||||
negone.negate();
|
negone.negate();
|
||||||
|
|
||||||
assert_eq!(a.0, vec![(0usize, Fr::one()), (1usize, Fr::one()), (2usize, Fr::one()), (3usize, negone)]);
|
assert_eq!(a.0, vec![(0usize, Fr::one()), (1usize, Fr::one()), (2usize, Fr::one()), (3usize, negone)]);
|
||||||
|
|
||||||
|
let x = LinearCombination::<usize, Bls12>::zero() + (Fr::one(), 0usize) - (Fr::one(), 1usize);
|
||||||
|
let y = LinearCombination::<usize, Bls12>::zero() + (Fr::one(), 2usize) - (Fr::one(), 3usize);
|
||||||
|
let z = x + &y - &y;
|
||||||
|
|
||||||
|
assert_eq!(z.0, vec![
|
||||||
|
(0usize, Fr::one()),
|
||||||
|
(1usize, negone),
|
||||||
|
(2usize, Fr::one()),
|
||||||
|
(3usize, negone),
|
||||||
|
(2usize, negone),
|
||||||
|
(3usize, Fr::one())
|
||||||
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// This is an error that could occur during circuit synthesis contexts,
|
/// This is an error that could occur during circuit synthesis contexts,
|
||||||
|
Loading…
Reference in New Issue
Block a user