truth table: Nullary and Unary Operations
preview
Here are the tests I have at the end of the chapters
1import src.truth_table
2import unittest
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
25# Exceptions seen
26# AssertionError
27# AttributeError
28# TypeError
questions about Nullary and Unary Operations
Here are questions you can answer after going through this chapter
requirements
Nullary Operations
There are 2 Nullary operations - Logical True and Logical False. They do not take input and always return True or False
test_logical_true
RED: make it fail
I change the name of
test_truth_table.pytotest_nullary_unary.pyI change the names of the class and method in
test_nullary_unary.py1import src.truth_table 2import unittest 3 4 5class TestNullaryOperations(unittest.TestCase): 6 7 def test_logical_true(self): 8 self.assertTrue(src.truth_table.logical_true()) 9 10 11# Exceptions seenthe terminal shows AttributeError
AttributeError: module 'src.truth_table' has no attribute 'logical_true'I have not added a definition for logical_true to
truth_table.pyin thesrcfolder
GREEN: make it pass
I add AttributeError to the list of Exceptions seen in
test_nullary_unary.py11# Exceptions seen 12# AssertionError 13# AttributeErrorI open
truth_table.pyfrom thesrcfolder in the editor of my Integrated Development Environment (IDE)I add a function to
truth_table.py1def logical_true(): 2 return Nonethe terminal shows AssertionError
AssertionError: None is not trueI change None to True in the return statement
1def logical_true(): 2 return Truethe test passes
logical_true does not take any input and always returns True
test_logical_false
RED: make it fail
I add another test to test_nullary_unary.py
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
14# Exceptions seen
the terminal shows AttributeError
AttributeError: module 'src.truth_table' has no attribute 'logical_false'. Did you mean: 'logical_true'?
I have not added a definition for logical_false to truth_table.py, I only added one for logical_true
GREEN: make it pass
I add a function to
truth_table.py1def logical_true(): 2 return True 3 4 5def logical_false(): 6 return Truethe terminal shows AssertionError
AssertionError: True is not falseI change True to False in the return statement
5def logical_false(): 6 return Falsethe test passes
Note
logical_true always returns True
logical_false always returns False
both Nullary Operations do not take input
Unary Operations
There are 2 unary operations: Logical Identity and Logical Negation, they each take one input and return True or False
test_logical_identity
RED: make it fail
I add a new TestCase for Unary Operations with a test to test_nullary_unary.py
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
19
20# Exceptions seen
the terminal shows AttributeError
AttributeError: module 'src.truth_table' has no attribute 'logical_identity'
I need to add a definition for it
GREEN: make it pass
I add the function to
truth_table.py5def logical_false(): 6 return False 7 8 9def logical_identity(): 10 return FalseTypeError: logical_identity() takes 0 positional arguments but 1 was givenI need to make the function accept input since the test sends True as input
I add TypeError to the list of Exceptions seen in
test_nullary_unary.py20# Exceptions seen 21# AssertionError 22# AttributeError 23# TypeErrorI add a name in parentheses for logical_identity to take input in
truth_table.py9def logical_identity(the_input): 10 return Falsethe terminal shows AssertionError
AssertionError: False is not trueI change the return statement
9def logical_identity(the_input): 10 return Truethe test passes
REFACTOR: make it better
I add another line to test_logical_identity in
test_nullary_unary.pyfor the case when it gets False as input16 def test_logical_identity(self): 17 self.assertTrue(src.truth_table.logical_identity(True)) 18 self.assertFalse(src.truth_table.logical_identity(False))the terminal shows AssertionError
AssertionError: True is not falseI change the return statement of logical_identity in
truth_table.py9def logical_identity(the_input): 10 return Falsethe terminal shows AssertionError
AssertionError: False is not truethere is a failure for the test that passed before. The expectation of the test is that
I change the return statement of the function
9def logical_identity(the_input): 10 return the_inputthe test passes.
the_inputis a name, I can use any name.
test_logical_negation
RED: make it fail
I add a test for logical_negation to test_nullary_unary.py
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(self):
21 self.assertFalse(src.truth_table.logical_negation(True))
22
23
24# Exceptions seen
the terminal shows AttributeError
AttributeError: module 'src.truth_table' has no attribute 'logical_negation'
GREEN: make it pass
I add a definition for the function in truth_table.py
9def logical_identity(the_input):
10 return the_input
11
12
13def logical_negation(the_input):
14 return the_input
the terminal shows AssertionError
AssertionError: True is not false
I change the return statement
13def logical_negation(the_input):
14 return False
the test passes
REFACTOR: make it better
I add another line to test_logical_negation in
test_nullary_unary.py20 def test_logical_negation(self): 21 self.assertFalse(src.truth_table.logical_negation(True)) 22 self.assertTrue(src.truth_table.logical_negation(False))the terminal shows AssertionError
AssertionError: False is not trueI change the return statement of the logical_negation function in
truth_table.py13def logical_negation(the_input): 14 return Truethe terminal shows AssertionError
AssertionError: True is not falsethe test fails for the line that passed before
I make the function return its input again
13def logical_negation(the_input): 14 return the_inputthe terminal shows AssertionError
AssertionError: True is not falsethe expectation of the test is
how to return the opposite of a boolean
I can use the “not” keyword to return the opposite of the boolean after it. I add it to the return statement
13def logical_negation(the_input): 14 return not the_inputthe test passes
I add to the name of the test
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 25# Exceptions seen
logical_negation also known as not returns the opposite of its input
close the project
I close
test_nullary_unary.pyandtruth_table.pyin the editorI click in the terminal and use q on the keyboard to leave the tests and the terminal goes back to the command line
I change directory to the parent of
truth_tablecd ..the terminal shows
.../pumping_pythonI am back in the
pumping_pythondirectory
review
I ran the following tests for Nullary Operations which take no input
and for Unary operations which take 1 input
How many questions can you answer after going through this chapter?
code from the chapter
Do you want to see all the CODE I typed for the Truth Table?
what is next?
Would you like to test binary operations? they take 2 inputs
rate pumping python
If this has been a 7 star experience for you, please CLICK HERE to leave a 5 star review of pumping python. It helps other people get into the book too