@@ -3,10 +3,10 @@ use itertools::Itertools;
33use crate :: {
44 algos:: { atoms, create_initial_cache, enumeration:: aux:: enum_aux} ,
55 formula:: { rebuild_formula, tree:: FormulaTree } ,
6- ltl:: trace:: parse_traces,
6+ ltl:: { Constant , trace:: parse_traces} ,
77} ;
88
9- use super :: { AND , F , G , Not , OR , SX , build_atom} ;
9+ use super :: { AND , F , G , Not , OR , SX , build_atom, build_const } ;
1010
1111fn test_ltl_search ( instance : & str , expected : FormulaTree ) {
1212 let instance = parse_traces ( & instance) ;
@@ -17,6 +17,7 @@ fn test_ltl_search(instance: &str, expected: FormulaTree) {
1717 ) ;
1818
1919 let atoms = atoms ( & instance. traces , instance. atomic_propositions ) ;
20+
2021 // Add initial formulas
2122 let ( atom, mut ltl_cache) = create_initial_cache ( atoms, & instance. target ) ;
2223 if let Some ( f) = atom {
@@ -120,6 +121,14 @@ fn instance_str(
120121}
121122
122123macro_rules! make_instance {
124+ ( pos : [ ] ,
125+ neg: [ $( { $( $name: ident : [ $( $v2: literal) ,* ] ) ,* } ) , * ] ) => {
126+ & instance_str(
127+ & [ ] ,
128+ & [ $( & [ $( & [ $( $v2) ,* ] ) ,* ] ) ,* ] ,
129+ & helper!{ $( [ $( $name ) ,* ] ) ,* }
130+ )
131+ } ;
123132 ( pos : [ $( { $( $name: ident : [ $( $v: literal) ,* ] ) ,* } ) , * ] ,
124133 neg: [ $( { $( $name2: ident : [ $( $v2: literal) ,* ] ) ,* } ) , * ] ) => {
125134 & instance_str(
@@ -308,3 +317,43 @@ fn a_and_b_and_c() {
308317 ) ;
309318 test_ltl_search ( example, exp) ;
310319}
320+
321+ #[ test]
322+ fn empty_neg_is_true ( ) {
323+ let example = make_instance ! (
324+ pos: [
325+ {
326+ a: [ 1 , 0 , 1 , 1 ] ,
327+ b: [ 1 , 0 , 0 , 1 ] ,
328+ c: [ 1 , 0 , 1 , 0 ]
329+ } ,
330+ {
331+ a: [ 1 , 1 , 0 ] ,
332+ b: [ 1 , 0 , 1 ] ,
333+ c: [ 1 , 1 , 1 ]
334+ }
335+ ] ,
336+ neg: [ ] ) ;
337+ let exp = build_const ( Constant :: True ) ;
338+ test_ltl_search ( example, exp) ;
339+ }
340+
341+ #[ test]
342+ fn empty_pos_is_false ( ) {
343+ let example = make_instance ! (
344+ pos: [ ] ,
345+ neg: [
346+ {
347+ a: [ 1 , 0 , 1 , 1 ] ,
348+ b: [ 1 , 0 , 0 , 1 ] ,
349+ c: [ 1 , 0 , 1 , 0 ]
350+ } ,
351+ {
352+ a: [ 1 , 1 , 0 ] ,
353+ b: [ 1 , 0 , 1 ] ,
354+ c: [ 1 , 1 , 1 ]
355+ }
356+ ] ) ;
357+ let exp = build_const ( Constant :: False ) ;
358+ test_ltl_search ( example, exp) ;
359+ }
0 commit comments