@@ -1105,3 +1105,84 @@ def test_models(sentence: nnf.NNF):
11051105 models = list (sentence .models ())
11061106 assert len (real_models ) == len (models )
11071107 assert model_set (real_models ) == model_set (models )
1108+
1109+
1110+ def test_nesting ():
1111+ a , b , c , d , e , f = Var ("a" ), Var ("b" ), Var ("c" ), Var ("d" ), \
1112+ Var ("e" ), Var ("f" )
1113+
1114+ # test left nestings on And
1115+ config .auto_simplify = False
1116+ formula = a & (b & c )
1117+ formula = formula & (d | e )
1118+ assert formula == And ({And ({And ({b , c }), a }), Or ({d , e })})
1119+ config .auto_simplify = True
1120+ formula = a & (b & c )
1121+ formula = formula & (d | e )
1122+ assert formula == And ({a , b , c , Or ({d , e })})
1123+
1124+ # test right nestings on And
1125+ config .auto_simplify = False
1126+ formula = a & (b & c )
1127+ formula = (d | e ) & formula
1128+ assert formula == And ({And ({And ({b , c }), a }), Or ({d , e })})
1129+ config .auto_simplify = True
1130+ formula = a & (b & c )
1131+ formula = (d | e ) & formula
1132+ assert formula == And ({a , b , c , Or ({d , e })})
1133+
1134+ # test nestings on both sides with And
1135+ config .auto_simplify = False
1136+ formula = a & (b & c )
1137+ formula2 = d & (e & f )
1138+ formula = formula & formula2
1139+ assert formula == And ({(And ({a , And ({b , c })})), And ({d , And ({e , f })})})
1140+ config .auto_simplify = True
1141+ formula = a & (b & c )
1142+ formula2 = d & (e & f )
1143+ formula = formula & formula2
1144+ assert formula == And ({a , b , c , d , e , f })
1145+
1146+ # test left nestings on Or
1147+ config .auto_simplify = False
1148+ formula = a | (b | c )
1149+ formula = formula | (d & e )
1150+ assert formula == Or ({Or ({Or ({b , c }), a }), And ({d , e })})
1151+ config .auto_simplify = True
1152+ formula = a | (b | c )
1153+ formula = formula | (d & e )
1154+ assert formula == Or ({a , b , c , And ({d , e })})
1155+
1156+ # test right nestings on Or
1157+ config .auto_simplify = False
1158+ formula = a | (b | c )
1159+ formula = (d & e ) | formula
1160+ assert formula == Or ({Or ({Or ({b , c }), a }), And ({d , e })})
1161+ config .auto_simplify = True
1162+ formula = a | (b | c )
1163+ formula = (d & e ) | formula
1164+ assert formula == Or ({a , b , c , And ({d , e })})
1165+
1166+ # test nestings on both sides with Or
1167+ config .auto_simplify = False
1168+ formula = a | (b | c )
1169+ formula2 = d | (e | f )
1170+ formula = formula | formula2
1171+ assert formula == Or ({(Or ({a , Or ({b , c })})), Or ({d , Or ({e , f })})})
1172+ config .auto_simplify = True
1173+ formula = a | (b | c )
1174+ formula2 = d | (e | f )
1175+ formula = formula | formula2
1176+ assert formula == Or ({a , b , c , d , e , f })
1177+
1178+ # test nestings with both And and Or
1179+ config .auto_simplify = False
1180+ formula = a & (b | c )
1181+ formula2 = d & (e & f )
1182+ formula = formula | formula2
1183+ assert formula == Or ({(And ({a , Or ({b , c })})), And ({d , And ({e , f })})})
1184+ config .auto_simplify = True
1185+ formula = a & (b | c )
1186+ formula2 = d & (e & f )
1187+ formula = formula | formula2
1188+ assert formula == Or ({(And ({a , Or ({b , c })})), And ({d , e , f })})
0 commit comments