Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions src/ideaCollisionGenerator.py
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,11 @@ def getKeywords(self):
random.shuffle(self.keywords)

def createPairs(self):
# an odd keyword would be left without a partner, so it is refused
# the same way the constructor refuses an odd numKeywords
if len(self.keywords) % 2 != 0:
raise ValueError("keywords must have an even count to be paired, got " + str(len(self.keywords)))

# match keywords in pairs
for i in range(0, len(self.keywords), 2):
pair = []
Expand Down
15 changes: 11 additions & 4 deletions tests/test_ideaCollisionGenerator.py
Original file line number Diff line number Diff line change
Expand Up @@ -120,14 +120,21 @@ def testNoKeywordsProduceNoPairs(self):
generator.createPairs()
self.assertEqual(generator.pairs, [])

def testOddKeywordCountRaisesIndexError(self):
# current behaviour: keywords[i+1] is unguarded, so the final iteration
# indexes past the end (unreachable through the CLI, where the count is 10)
def testOddKeywordCountRaisesValueError(self):
# a trailing keyword with no partner is refused rather than indexed past
generator = IdeaCollisionGenerator()
generator.keywords = ["a", "b", "c"]
with self.assertRaises(IndexError):
with self.assertRaisesRegex(ValueError, "even count"):
generator.createPairs()

def testOddKeywordCountCreatesNoPairs(self):
# the count is checked before any pair is made, so nothing half-built is left behind
generator = IdeaCollisionGenerator()
generator.keywords = ["a", "b", "c"]
with self.assertRaises(ValueError):
generator.createPairs()
self.assertEqual(generator.pairs, [])


class TestPromptForIdeas(unittest.TestCase):
def testCollectsOneIdeaPerPair(self):
Expand Down
Loading