Skip to content

Commit 1e3b856

Browse files
committed
chore: add failing test for unsupported relation.
1 parent 2eb9c40 commit 1e3b856

File tree

3 files changed

+33
-9
lines changed

3 files changed

+33
-9
lines changed

src/linear_relation/mod.rs

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -676,9 +676,7 @@ impl<G: PrimeGroup> TryFrom<&LinearRelation<G>> for CanonicalLinearRelation<G> {
676676
.image()
677677
.is_ok_and(|img| img.iter().all(|&x| x != G::identity()))
678678
{
679-
return Err(InvalidInstance::new(
680-
"Image contains identity element"
681-
));
679+
return Err(InvalidInstance::new("Image contains identity element"));
682680
}
683681

684682
// If any linear combination is empty, the relation is invalid
@@ -688,17 +686,17 @@ impl<G: PrimeGroup> TryFrom<&LinearRelation<G>> for CanonicalLinearRelation<G> {
688686
.iter()
689687
.any(|lc| lc.0.is_empty())
690688
{
691-
return Err(InvalidInstance::new(
692-
"Linear combinations cannot be empty",
693-
));
689+
return Err(InvalidInstance::new("Linear combinations cannot be empty"));
694690
}
695691

696692
// If any linear combination has no witness variables, the relation is invalid
697693
if relation.linear_map.linear_combinations.iter().any(|lc| {
698694
lc.0.iter()
699695
.all(|weighted| matches!(weighted.term.scalar, ScalarTerm::Unit))
700696
}) {
701-
return Err(InvalidInstance::new("A linear combination does not have any witness variables"));
697+
return Err(InvalidInstance::new(
698+
"A linear combination does not have any witness variables",
699+
));
702700
}
703701

704702
let mut canonical = CanonicalLinearRelation::new();

src/tests/test_relations.rs

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -324,7 +324,6 @@ fn subtractions_with_shift<G: PrimeGroup, R: RngCore>(
324324
(instance, witness)
325325
}
326326

327-
328327
#[allow(non_snake_case)]
329328
fn cmz_wallet_spend_relation<G: PrimeGroup, R: RngCore>(
330329
mut rng: &mut R,
@@ -371,6 +370,34 @@ fn cmz_wallet_spend_relation<G: PrimeGroup, R: RngCore>(
371370
(instance, witness)
372371
}
373372

373+
374+
fn test_another_relation<G: PrimeGroup, R: RngCore>(
375+
mut rng: &mut R,
376+
) -> (CanonicalLinearRelation<G>, Vec<G::Scalar>) {
377+
let mut instance = LinearRelation::<G>::new();
378+
let r = instance.allocate_scalar();
379+
let var_A = instance.allocate_element();
380+
let var_B = instance.allocate_element();
381+
let eq1 = instance.allocate_eq(
382+
var_A * G::Scalar::from(4)
383+
+ (r * G::Scalar::from(2) + G::Scalar::from(3)) * var_B,
384+
);
385+
386+
let A = G::random(&mut rng);
387+
let B = G::random(&mut rng);
388+
let r = G::Scalar::random(&mut rng);
389+
let C = A * G::Scalar::from(4)
390+
+ (r * G::Scalar::from(2) + G::Scalar::from(3)) * var_B;
391+
instance.set_element(var_A, A);
392+
instance.set_element(var_B, B);
393+
instance.set_element(eq1, C);
394+
395+
let witness = vec![r];
396+
let instance = CanonicalLinearRelation::try_from(&instance).unwrap();
397+
(instance, witness)
398+
}
399+
400+
374401
#[test]
375402
fn test_cmz_wallet_with_fee() {
376403
use group::Group;

src/tests/test_validation_criteria.rs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,6 @@ mod instance_validation {
103103
assert!(result.is_err());
104104
}
105105

106-
107106
#[test]
108107
fn test_empty_string() {
109108
let rng = &mut rand::thread_rng();

0 commit comments

Comments
 (0)