@@ -408,6 +408,45 @@ mod tests {
408408 ) ;
409409 }
410410
411+ #[ test]
412+ fn condition_negate_or_ite ( ) {
413+ let builder = RobddBuilder :: < AllIteTable < BddPtr > > :: new_with_linear_order ( 3 ) ;
414+
415+ let v0 = builder. var ( VarLabel :: new ( 0 ) , true ) ;
416+ let v1 = builder. var ( VarLabel :: new ( 1 ) , true ) ;
417+ let v2 = builder. var ( VarLabel :: new ( 2 ) , true ) ;
418+
419+ let bdd = builder. negate ( v2) ;
420+ let bdd = builder. or ( v1, bdd) ;
421+ let bdd = builder. ite ( v0, bdd, v1) ;
422+
423+ let cond_bdd = builder. condition ( bdd, VarLabel :: new ( 2 ) , true ) ;
424+ assert ! ( builder. eq( cond_bdd, builder. var( VarLabel :: new( 1 ) , true ) ) ) ;
425+ let cond_q0 = builder. condition ( v0, VarLabel :: new ( 2 ) , true ) ;
426+ let cond_q1 = builder. condition ( v1, VarLabel :: new ( 2 ) , true ) ;
427+ assert ! ( builder. eq( cond_q0, builder. var( VarLabel :: new( 0 ) , true ) ) ) ;
428+ assert ! ( builder. eq( cond_q1, builder. var( VarLabel :: new( 1 ) , true ) ) ) ;
429+ }
430+
431+ #[ test]
432+ fn exists_negate_or_ite ( ) {
433+ let builder = RobddBuilder :: < AllIteTable < BddPtr > > :: new_with_linear_order ( 3 ) ;
434+
435+ let v0 = builder. var ( VarLabel :: new ( 0 ) , true ) ;
436+ let v1 = builder. var ( VarLabel :: new ( 1 ) , true ) ;
437+ let v2 = builder. var ( VarLabel :: new ( 2 ) , true ) ;
438+
439+ let bdd = builder. negate ( v2) ;
440+ let bdd = builder. or ( v1, bdd) ;
441+ let bdd = builder. ite ( v0, bdd, v1) ;
442+
443+ let cond_q0 = builder. exists ( v0, VarLabel :: new ( 2 ) ) ;
444+ let cond_q1 = builder. exists ( v1, VarLabel :: new ( 2 ) ) ;
445+ assert ! ( builder. eq( cond_q0, builder. var( VarLabel :: new( 0 ) , true ) ) ) ;
446+ assert ! ( builder. eq( cond_q1, builder. var( VarLabel :: new( 1 ) , true ) ) ) ;
447+ let cond_bdd = builder. exists ( bdd, VarLabel :: new ( 2 ) ) ;
448+ assert ! ( builder. eq( cond_bdd, builder. var( VarLabel :: new( 1 ) , true ) ) ) ;
449+ }
411450 #[ test]
412451 fn test_exist ( ) {
413452 let builder = RobddBuilder :: < AllIteTable < BddPtr > > :: new_with_linear_order ( 3 ) ;
0 commit comments