Skip to content

Commit 6bcf261

Browse files
committed
Extend basic tests.
1 parent 767c23c commit 6bcf261

File tree

3 files changed

+61
-4
lines changed

3 files changed

+61
-4
lines changed

Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ solver-z3 = ["dep:z3"]
4242
[dependencies]
4343
regex = "1.10.2" # Regexes used for parsing of basic .aeon constructs.
4444
lazy_static = "1.4.0" # Used for initialization of commonly used regexes.
45-
biodivine-lib-bdd = ">=0.5.5, <1.0.0"
45+
biodivine-lib-bdd = ">=0.5.6, <1.0.0"
4646
num-bigint = "0.4.4" # Used as infinite-precision representation in BDDs.
4747
num-traits = "0.2.17" # `BigInt::to_f64`
4848
roxmltree = "0.19.0" # Used for SBML parsing.

src/symbolic_async_graph/_impl_graph_colored_vertices.rs

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -234,3 +234,54 @@ impl BddSet for GraphColoredVertices {
234234
u16::try_from(self.state_variables.len() + self.parameter_variables.len()).unwrap()
235235
}
236236
}
237+
238+
#[cfg(test)]
239+
mod tests {
240+
use crate::biodivine_std::traits::Set;
241+
use crate::symbolic_async_graph::SymbolicAsyncGraph;
242+
use crate::BooleanNetwork;
243+
use num_bigint::BigInt;
244+
use num_traits::One;
245+
246+
#[test]
247+
fn basic_colored_spaces_set_test() {
248+
let bn = BooleanNetwork::try_from_file("aeon_models/005.aeon").unwrap();
249+
let stg = SymbolicAsyncGraph::new(bn.clone()).unwrap();
250+
251+
let unit = stg.mk_unit_colored_vertices();
252+
assert!(!unit.is_singleton());
253+
assert_eq!(unit, unit.copy(unit.clone().into_bdd()));
254+
255+
let singleton = unit.pick_singleton();
256+
assert_eq!(1.0, singleton.approx_cardinality());
257+
assert_eq!(BigInt::one(), singleton.exact_cardinality());
258+
let singleton_color = singleton.colors();
259+
let singleton_vertices = singleton.vertices();
260+
assert!(singleton_color.is_singleton());
261+
assert!(singleton_vertices.is_singleton());
262+
assert!(!unit.intersect_colors(&singleton_color).is_singleton());
263+
// There is only one color, hence this holds. Otherwise this should not hold.
264+
assert!(unit.intersect_vertices(&singleton_vertices).is_singleton());
265+
assert!(unit.minus_colors(&singleton_color).is_empty());
266+
assert!(unit.minus_vertices(&singleton_vertices).is_subset(&unit));
267+
268+
let var = bn.as_graph().find_variable("v_XPF").unwrap();
269+
let selected = unit.fix_network_variable(var, true);
270+
assert_eq!(
271+
unit.approx_cardinality() / 2.0,
272+
selected.approx_cardinality()
273+
);
274+
let restricted = unit.restrict_network_variable(var, true);
275+
assert_eq!(unit.approx_cardinality(), restricted.approx_cardinality());
276+
let restricted = singleton.restrict_network_variable(var, false);
277+
assert_eq!(
278+
singleton.approx_cardinality() * 2.0,
279+
restricted.approx_cardinality()
280+
);
281+
assert!(singleton.restrict_network_variable(var, true).is_empty());
282+
283+
// There are 28 variables and we are eliminating 22 of them, so 6 should be left.
284+
let project = unit.raw_projection(&stg.symbolic_context().state_variables()[0..22]);
285+
assert_eq!(project.iter().count(), 2_usize.pow(6));
286+
}
287+
}

src/trap_spaces/_impl_network_colored_spaces.rs

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -77,15 +77,15 @@ impl NetworkColoredSpaces {
7777
pub fn raw_projection(&self, variables: &[BddVariable]) -> RawProjection {
7878
let mut retained = Vec::new();
7979
for p_var in &self.parameter_variables {
80-
if variables.contains(p_var) {
80+
if !variables.contains(p_var) {
8181
retained.push(*p_var);
8282
}
8383
}
8484
for (t_var, f_var) in &self.dual_variables {
85-
if variables.contains(t_var) {
85+
if !variables.contains(t_var) {
8686
retained.push(*t_var);
8787
}
88-
if variables.contains(f_var) {
88+
if !variables.contains(f_var) {
8989
retained.push(*f_var);
9090
}
9191
}
@@ -233,5 +233,11 @@ mod tests {
233233
// There is only one color, hence this holds. Otherwise this should not hold.
234234
assert!(unit.intersect_spaces(&singleton_space).is_singleton());
235235
assert!(unit.minus_colors(&singleton_color).is_empty());
236+
assert!(unit.minus_spaces(&singleton_space).is_subset(&unit));
237+
238+
// There are 28 network variables and we are eliminating 22 of them, so 6 should be left.
239+
let dual_vars = ctx.inner_context().all_extra_state_variables();
240+
let project = unit.raw_projection(&dual_vars[0..44]);
241+
assert_eq!(project.iter().count(), 3_usize.pow(6));
236242
}
237243
}

0 commit comments

Comments
 (0)