truth table: tests and solutions¶
tests¶
the code in truth_table/tests/test_truth_table.py from booleans: truth table
1import unittest
2import src.truth_table
3
4
5class TestNullaryOperations(unittest.TestCase):
6
7 def test_logical_true(self):
8 self.assertTrue(src.truth_table.logical_true())
9
10 def test_logical_false(self):
11 self.assertFalse(src.truth_table.logical_false())
12
13
14class TestUnaryOperations(unittest.TestCase):
15
16 def test_logical_identity(self):
17 self.assertTrue(src.truth_table.logical_identity(True))
18 self.assertFalse(src.truth_table.logical_identity(False))
19
20 def test_logical_negation_aka_not(self):
21 self.assertFalse(src.truth_table.logical_negation(True))
22 self.assertTrue(src.truth_table.logical_negation(False))
23
24
25class TestBinaryOperations(unittest.TestCase):
26
27 def test_contradiction(self):
28 self.assertFalse(src.truth_table.contradiction(True, True))
29 self.assertFalse(src.truth_table.contradiction(True, False))
30 self.assertFalse(src.truth_table.contradiction(False, True))
31 self.assertFalse(src.truth_table.contradiction(False, False))
32
33 def test_logical_conjunction(self):
34 self.assertTrue(src.truth_table.logical_conjunction(True, True))
35 self.assertFalse(src.truth_table.logical_conjunction(True, False))
36 self.assertFalse(src.truth_table.logical_conjunction(False, True))
37 self.assertFalse(src.truth_table.logical_conjunction(False, False))
38
39 def test_project_second(self):
40 self.assertTrue(src.truth_table.project_second(True, True))
41 self.assertFalse(src.truth_table.project_second(True, False))
42 self.assertTrue(src.truth_table.project_second(False, True))
43 self.assertFalse(src.truth_table.project_second(False, False))
44
45 def test_converse_non_implication(self):
46 self.assertFalse(src.truth_table.converse_non_implication(True, True))
47 self.assertFalse(src.truth_table.converse_non_implication(True, False))
48 self.assertTrue(src.truth_table.converse_non_implication(False, True))
49 self.assertFalse(src.truth_table.converse_non_implication(False, False))
50
51 def test_negate_first(self):
52 self.assertFalse(src.truth_table.negate_first(True, True))
53 self.assertFalse(src.truth_table.negate_first(True, False))
54 self.assertTrue(src.truth_table.negate_first(False, True))
55 self.assertTrue(src.truth_table.negate_first(False, False))
56
57 def test_logical_nand(self):
58 self.assertFalse(src.truth_table.logical_nand(True, True))
59 self.assertTrue(src.truth_table.logical_nand(True, False))
60 self.assertTrue(src.truth_table.logical_nand(False, True))
61 self.assertTrue(src.truth_table.logical_nand(False, False))
62
63 def test_tautology(self):
64 self.assertTrue(src.truth_table.tautology(True, True))
65 self.assertTrue(src.truth_table.tautology(True, False))
66 self.assertTrue(src.truth_table.tautology(False, True))
67 self.assertTrue(src.truth_table.tautology(False, False))
68
69 def test_logical_disjunction(self):
70 self.assertTrue(src.truth_table.logical_disjunction(True, True))
71 self.assertTrue(src.truth_table.logical_disjunction(True, False))
72 self.assertTrue(src.truth_table.logical_disjunction(False, True))
73 self.assertFalse(src.truth_table.logical_disjunction(False, False))
74
75 def test_exclusive_disjunction(self):
76 self.assertFalse(src.truth_table.exclusive_disjunction(True, True))
77 self.assertTrue(src.truth_table.exclusive_disjunction(True, False))
78 self.assertTrue(src.truth_table.exclusive_disjunction(False, True))
79 self.assertFalse(src.truth_table.exclusive_disjunction(False, False))
80
81 def test_material_non_implication(self):
82 self.assertFalse(src.truth_table.material_non_implication(True, True))
83 self.assertTrue(src.truth_table.material_non_implication(True, False))
84 self.assertFalse(src.truth_table.material_non_implication(False, True))
85 self.assertFalse(src.truth_table.material_non_implication(False, False))
86
87 def test_project_first(self):
88 self.assertTrue(src.truth_table.project_first(True, True))
89 self.assertTrue(src.truth_table.project_first(True, False))
90 self.assertFalse(src.truth_table.project_first(False, True))
91 self.assertFalse(src.truth_table.project_first(False, False))
92
93 def test_converse_implication(self):
94 self.assertTrue(src.truth_table.converse_implication(True, True))
95 self.assertTrue(src.truth_table.converse_implication(True, False))
96 self.assertFalse(src.truth_table.converse_implication(False, True))
97 self.assertTrue(src.truth_table.converse_implication(False, False))
98
99 def test_negate_second(self):
100 self.assertFalse(src.truth_table.negate_second(True, True))
101 self.assertTrue(src.truth_table.negate_second(True, False))
102 self.assertFalse(src.truth_table.negate_second(False, True))
103 self.assertTrue(src.truth_table.negate_second(False, False))
104
105 def test_logical_nor(self):
106 self.assertFalse(src.truth_table.logical_nor(True, True))
107 self.assertFalse(src.truth_table.logical_nor(True, False))
108 self.assertFalse(src.truth_table.logical_nor(False, True))
109 self.assertTrue(src.truth_table.logical_nor(False, False))
110
111 def test_logical_equality(self):
112 self.assertTrue(src.truth_table.logical_equality(True, True))
113 self.assertFalse(src.truth_table.logical_equality(True, False))
114 self.assertFalse(src.truth_table.logical_equality(False, True))
115 self.assertTrue(src.truth_table.logical_equality(False, False))
116
117 def test_material_implication(self):
118 self.assertTrue(src.truth_table.material_implication(True, True))
119 self.assertFalse(src.truth_table.material_implication(True, False))
120 self.assertTrue(src.truth_table.material_implication(False, True))
121 self.assertTrue(src.truth_table.material_implication(False, False))
122
123
124# Exceptions Encountered
125# AssertionError
126# AttributeError
127# TypeError
128# SyntaxError
solutions¶
the solutions in truth_table/src/truth_table.py from booleans: truth table
1def logical_true():
2 return True
3
4
5def logical_false():
6 return False
7
8
9def logical_identity(the_input):
10 return the_input
11
12
13def logical_negation(the_input):
14 return not the_input
15
16
17def contradiction(first_input, second_input):
18 return False
19
20
21def logical_conjunction(first_input, second_input):
22 return first_input and second_input
23
24
25def project_second(first_input, second_input):
26 return second_input
27
28
29def converse_non_implication(first_input, second_input):
30 return not first_input and second_input
31
32
33def negate_first(first_input, second_input):
34 return not first_input
35
36
37def logical_nand(first_input, second_input):
38 return not (first_input and second_input)
39
40
41def tautology(first_input, second_input):
42 return True
43
44
45def logical_disjunction(first_input, second_input):
46 return first_input or second_input
47
48
49def exclusive_disjunction(first_input, second_input):
50 return first_input != second_input
51 return not first_input == second_input
52 return (not first_input and second_input) or (first_input and not second_input)
53
54
55def material_non_implication(first_input, second_input):
56 return first_input and not second_input
57
58
59def project_first(first_input, second_input):
60 return first_input
61
62
63def converse_implication(first_input, second_input):
64 return first_input or not second_input
65
66
67def negate_second(first_input, second_input):
68 return not second_input
69
70
71def logical_nor(first_input, second_input):
72 return not (first_input or second_input)
73
74
75def logical_equality(first_input, second_input):
76 return first_input == second_input
77 return (first_input or not second_input) and (not first_input or second_input)
78
79
80def material_implication(first_input, second_input):
81 return not first_input or second_input