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