# Test cases.
#
# Format: EXPRESSION[==DNF_EXPRESSION]
# If == and right side are omitted, the EXPRESSION is assumed
# to be already in DNF.
# Lines starting with '#' are ignored.
# Blank lines are ignored.
# No blanks in expressions.
# OR  operator: |
# AND operator: &
# NOT operator: !
# Parentheses are allowed.
# Single letter, case sensitive variables names.

a
!a
a|a == a
a|!a
!a|a
a&a == a
a|b
!a|!b
a|!b
!a|b
a&b
!a&!b
a&!b
!a&b
a&a&a == a
a&!a
a&!a|b&!b == a&!a
!a&!a&!a == !a
!a&!b&!a&!b == !a&!b
a&b&a == a&b
!a&!b&!a == !a&!b
!a&b&!a == !a&b
a|a|a == a
!a|a|a == a|!a
!a|!a|a == a|!a
!a|!a|!a == !a
a|!a|!a == a|!a
a|a|!a == a|!a
!a|a|!a == a|!a
!(a|b) == !a&!b
!(a&b) == !a|!b
a&(b|c) == a&b|a&c
(a|b)&(c&d) == a&c&d|b&c&d
(a|b)&c&d == d&c&a|d&c&b
(a|b)&!c == a&!c|b&!c
(a|b)&!(c&d) == a&!c|a&!d|b&!c|b&!d
(a|b)&(c|d) == a&c|a&d|b&c|b&d
a&b&(c|d) == a&b&c|a&b&d
a|b&(c|d&(e|f&g&(h|i))) == a|b&c|b&d&e|b&d&h&f&g|b&d&i&f&g
a&(b|c&(d|(e&(f|g|(h&i))))) == a&b|a&c&d|a&c&e&h&i|a&c&e&f|a&c&e&g
a&(b|c&(d|(e&(f|g|(h&i)|j)))) == a&b|a&c&d|a&c&e&j|a&c&e&h&i|a&c&e&f|a&c&e&g
a&(b|c&(d|(e&(f|g|(h&i))|j))) == a&b|a&c&d|a&c&j|a&c&e&h&i|a&c&e&f|a&c&e&g
(a|b)&(c|d)&(e|f) == e&a&c|e&a&d|f&a&c|f&a&d|e&b&c|e&b&d|f&b&c|f&b&d
(a|b)&(c|d)&(e|f)&(g|h) == g&e&a&c|g&e&a&d|g&f&a&c|g&f&a&d|h&e&a&c|h&e&a&d|h&f&a&c|h&f&a&d|g&e&b&c|g&e&b&d|g&f&b&c|g&f&b&d|h&e&b&c|h&e&b&d|h&f&b&c|h&f&b&d
!(a|b)&!(c|d)&!(e|f)&!(g|h) == !a&!b&!c&!d&!e&!f&!g&!h
!(a|b)&!(c|d)&(e|f)&!(g|h) == !g&!h&e&!a&!b&!c&!d|!g&!h&f&!a&!b&!c&!d
!(!(a&m)) == a&m
(!a|b|c)&(a|b|!c) == a&b|a&c|b|b&!c|c&b|b&!a|!c&!a
!(a&(a|d)&(c|a)&(c|d)|(a&e)) == !a&!c&!d&!e|!a&!c&!d|!a&!c&!e|!a&!d&!e|!c&!d&!e|!a&!c|!a&!d|!a&!e|!a
((!a&!b)|(!d&!e)|(!f&!g))&((!a&!b)|(!h&!i)|(!d&!e)|(!f&!g)) == !a&!b&!d&!e|!a&!b&!f&!g|!a&!b&!h&!i|!d&!e&!f&!g|!d&!e&!h&!i|!f&!g&!h&!i|!a&!b|!d&!e|!f&!g
