From 0c97755813f58de1d96ba8797be63c22d2b3c6d8 Mon Sep 17 00:00:00 2001 From: RunasSudo Date: Tue, 26 Oct 2021 00:55:42 +1100 Subject: [PATCH] Add CSP parsing tests --- src/parser/csp.rs | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/src/parser/csp.rs b/src/parser/csp.rs index 1d6e405..4451c21 100644 --- a/src/parser/csp.rs +++ b/src/parser/csp.rs @@ -142,3 +142,35 @@ pub fn parse_reader(reader: R, require_1: bool, require_sequ constraints: None, }); } + +#[test] +fn csp_formal() { + let csp_data = "A,B,C\n1,2,3"; + let election = parse_reader::<_, crate::numbers::Rational>(csp_data.as_bytes(), false, false, false).unwrap(); + assert_eq!(election.ballots.first().unwrap().preferences, vec![vec![0], vec![1], vec![2]]); + + let csp_data = "A,B,C\n2,3,4"; + let election = parse_reader::<_, crate::numbers::Rational>(csp_data.as_bytes(), false, false, false).unwrap(); + assert_eq!(election.ballots.first().unwrap().preferences, vec![vec![0], vec![1], vec![2]]); +} + +#[test] +fn csp_no1() { + let csp_data = "A,B,C\n2,3,4"; + let election = parse_reader::<_, crate::numbers::Rational>(csp_data.as_bytes(), true, false, false).unwrap(); + assert_eq!(election.ballots.first().unwrap().preferences.len(), 0); +} + +#[test] +fn csp_skipped_preference() { + let csp_data = "A,B,C\n1,3,4"; + let election = parse_reader::<_, crate::numbers::Rational>(csp_data.as_bytes(), false, true, false).unwrap(); + assert_eq!(election.ballots.first().unwrap().preferences, vec![vec![0]]); +} + +#[test] +fn csp_duplicate_preference() { + let csp_data = "A,B,C\n1,2,2"; + let election = parse_reader::<_, crate::numbers::Rational>(csp_data.as_bytes(), false, false, true).unwrap(); + assert_eq!(election.ballots.first().unwrap().preferences, vec![vec![0]]); +}