Skip to main content

A complete test case generator.

Project description

pycontest(v1.2)

An easy to use testcase generator for generating testcases for online judges.

Installation

$ pip install pycontest

Basic Usage

I highly recommend you reading this example.

Types

Type Description Example
IntVar(a, b) Generates a random integer N such that a <= N <= b. IntVar(1, IntVar(10, 20))
FloatVar(a, b) Generates a random float N such that a <= N <= b. FloatVar(1.5, FloatVar(1.6, 20))
CustomArray(l, g, *args) Generates an array with length l and g as generator of each element Here
IntArray(a, b, l) Generates a random integer array with length l and IntVar(a, b) as generator. IntArray(0, 100, IntVar(0, 10**9))
FloatArray(a, b, l) Generates a random float array with length l and FloatVar(a, b) as generator. FloatArray(2.2, 80.3, IntVar(0, 10**9))
ChoiceList(l, c_l: list or string) Generates a random array with length l and a random choice of c_l ChoiceList(100, string.hexdigits)
Array2d(l, array:[IntArray, FloatArray, ChoiceList]) Populates a 2d array with given array Here

Usage

from pycontest import Case, IntArray, \
    IntVar

from pycontest.helper import list_printer


class TestCase(Case):
    batch_size = 10

    n = IntVar(1, 10**2)
    arr = IntArray(-1000, 1000, n)

    def __inp_str__(self):
        return f"{self.n}\n" +\
                f"{list_printer(self.arr)}"

    def config(self):
        self.function = min
        self.input_sequence = [self.arr]


Case.main()

Instead of function you can use a python file, set self.app to the python file path.

    def config(self):
        self.path = 'my_app.py'

in this method your app will run with __inp_str__ function as input, and all the stdout prints will captured as output. see example_app.

writer

Default writer, writes each testcase into separate files:

        # └───tests
        #     ├────in
        #     │     ├───input0.txt
        #     │     ├───input1.txt
        #     │     │  . . .
        #     │     └───input10.txt
        #     └────out
        #           ├───output0.txt
        #           ├───output1.txt
        #           │  . . .
        #           └───output10.txt

each tests/in/input<n>.txt file contains the output of __inp_str__function.

each tests/out/output<n>.txt file contains the the output of function with *input_sequence as parameters.

For more examples and explanation see examples.

Using more than one TestCase

you can simply generate different test cases with making more classes inheriting from Case class.

...
class TestCase1(Case):
    # ...
    pass

class TestCase2(Case):
    # ...
    pass
Case.main()

Using custom generator

To use your own generator for generating variables you can use CustomArray.

from pycontest import Case, IntVar, CustomArray
import random


def q(n: int):
    while True:
        x = random.randint(0, 3000)
        if n > 0 and x > 1000 or x == 0:
            yield 0
            n -= 1
        else:
            yield x


class TestCase(Case):
    m = IntVar(0, 5)
    arr = CustomArray(100, q, m)

    def __str__(self):
        return f"input:\n{self.m}\n" + \
               f"\n{self.arr}\n"


Case.main()

from pycontest import Case, IntVar, IntArray Here with CustomArray via our q generator we were able to generate an array that has maximum m 0s in and chance of a member being 0 is 1/3.

###using-2d-array

class TestCase(Case):
    m = IntVar(0, 5)
    arr = IntArray(100, q, m)
    arr2d = Array2d(m, arr)

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pycontest-1.3.tar.gz (6.8 kB view hashes)

Uploaded Source

Built Distribution

pycontest-1.3-py3-none-any.whl (7.7 kB view hashes)

Uploaded Python 3

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page