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