예제 #1
0
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
예제 #2
0
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