def generate_is_isbn(): """ Genereer de contexten voor de "is_isbn"-functie. :return: De gegenereerde contexten. """ contexts = [] # Genereer eerst de argumenten voor de functie "is_isbn". # We beginnen met wat vaste combinaties. args = [ ('9789027439642', False), ('9789027439642', True), ('9789027439642', None), ('080442957X', None), ('080442957X', False), (9789027439642, None), ] # Voor de rest vullen we aan met willekeurige argumenten. while len(args) < 50: code = generate_code() args.append((code, random.choice([None, True, False]))) # Genereer de eigenlijke contexten. for code, isbn13 in args: # Eerst doen we de functieoproep. We geven zeker de ISBN mee. function_arguments = [values.encode(code)] # Indien nodig geven we ook het tweede argument mee. if isbn13 is not None: function_arguments.append(values.encode(isbn13)) # Bereken het resultaat met de gegeven argumenten. result = solution.is_isbn(code, isbn13 if isbn13 is not None else True) # Ons testgeval bevat de functieoproep als invoer, en de berekende waarde # als verwachte uitvoer. testcase = { "input": { "type": "function", "name": "is_isbn", "arguments": function_arguments }, "output": { "result": { "value": (values.encode(result)) } } } # Steek het testgeval in een context. context = {"testcases": [testcase]} contexts.append(context) return contexts
def generate_are_isbn(): """ Genereer de contexten voor de "are_isbn"-functie. :return: De gegenereerde contexten. """ # Vaste invoerargumenten die we zeker in het testplan willen. codes = [ '0012345678', '0012345679', '9971502100', '080442957X', 5, True, 'The Practice of Computing Using Python', '9789027439642', '5486948320146' ] codes2 = ['012345678' + str(digit) for digit in range(10)] args = [ (codes, None), (codes, True), (codes, False), (codes2, None), (codes2, True), (codes2, False), ] # Vul opnieuw de rest aan tot we aan 50 zitten. while len(args) < 50: codes = [generate_code() for _ in range(random.randint(4, 10))] args.append((codes, random.choice([None, True, False]))) # Genereer de eigenlijke contexten. contexts = [] for index, (codes, isbn13) in enumerate(args): index += 1 # Deze keer pakken we het iets anders aan: de lijst van ISBN's kennen we # eerst toe aan een variabele, en geven het niet rechtstreeks mee als # argument. Maak het testgeval voor de assignment. assignment_testcase = { "input": { "variable": f"codes{index:02d}", "expression": values.encode(codes), "type": "sequence" } } # Stel de functieargumenten op. We geven opnieuw sowieso de variabele die # we eerst hebben aangemaakt mee als argument. function_arguments = [f"codes{index:02d}"] # Voeg het tweede argument toe indien nodig. if isbn13 is not None: function_arguments.append(values.encode(isbn13)) # Bereken het resultaat. result = solution.are_isbn(codes, isbn13 if isbn13 is not None else None) # Maak het normale testgeval. We hebben opnieuw als invoer de functie en als # uitvoer de verwachte waarde. testcase = { "input": { "type": "function", "name": "are_isbn", "arguments": function_arguments }, "output": { "result": { "value": (values.encode(result)) } } } # Voeg beide testcases toe aan een context. # Elke testcase heeft hoogstens één functieoproep of assignment, maar niet # beide. Daarom hebben we nu twee testgevallen. Het eerste testgeval voor # de assignment heeft enkel de standaardtests, wat wil zeggen dat er bv. # geen uitvoer op stderr mag zijn. context = {"testcases": [assignment_testcase, testcase]} contexts.append(context) return contexts