{ "info": { "author": "Evan Zhang", "author_email": "", "bugtrack_url": null, "classifiers": [ "Development Status :: 3 - Alpha", "Environment :: Console", "Intended Audience :: Developers", "License :: OSI Approved :: GNU Affero General Public License v3 or later (AGPLv3+)", "Operating System :: POSIX :: Linux", "Programming Language :: Python", "Programming Language :: Python :: 3.7" ], "description": "# Testcase Generator\n\nA testcase generator for easily creating testcases for online judges.\n\n## Installation\n```\n$ pip install testcase-generator\n```\n\nAlternatively, just clone this repository!\n\n## Usage\n```python\nfrom testcase_generator import Constraint, Case, Batch, Generator, ConstraintParser\n\ndef set_constraints(self):\n ## Write main constraints here ##\n # Sets the constraint of N to be between 1 and 10^3 inclusive.\n self.N = Constraint(1, 10**3)\n\ndef generate_input(self):\n ## Write generator here ##\n # Generates a value for N\n yield self.N.next\n\n\nCase.SET_CONSTRAINTS = set_constraints\nCase.SET_INPUT = generate_input\n\n\n# Using the yaml config to create the batches:\nconfig_yaml = \"\"\"\n- batch: 1\n constraints: {N: 1~10**2}\n cases:\n - {N: MIN}\n - {N: MAX}\n - {N: 2~10}\n - {N: 10**2-1~}\n- batch: 2\n constraints: {}\n cases:\n - {}\n - {N: ~2}\n\"\"\"\n\np = ConstraintParser(data=config_yaml)\np.parse()\nbatches = p.batches\n\n\n# creating the batches manually\nbatches = [\n Batch(num=1, cases=[Case() for i in range(4)]),\n Batch(num=2, cases=[Case(N=Constraint(1,10)) for i in range(2)]),\n]\n\n\nGenerator(batches=batches, exe='COMMAND_TO_GENERATE_OUTPUT').start()\n```\n\nThe generator features a `GraphGenerator`, which generates a variety of graph types:\n```python\nfrom testcase_generator import Constraint, Case, Batch, Generator, ConstraintParser, GraphGenerator\n\n\"\"\"\n | initialize(self, N, graph_type, *args, **kwargs)\n | N: number of nodes\n | graph_type:\n | 1: normal graph\n | 2: connected graph\n | 3: complete graph\n | 4: circle\n | 10: line\n | 11: normal tree\n | 12: tree, all nodes connected to one node\n | 13: caterpillar tree\n | 14: binary tree\n | kwargs:\n | M: number of edges, leave blank if it is a tree\n | duplicates: allow for duplicate edges between nodes\n | self_loops: allow for edges between the same node\n\"\"\"\n\ndef set_constraints(self):\n ## Write main constraints here ##\n # Sets the constraint of N to be between 1 and 10^3 inclusive.\n # In this case, this is a graph with N nodes.\n self.N = Constraint(1, 10**3)\n # creates the graph generator\n self.ee = GraphGenerator()\n # Creates the variable that returns the next edge in the graph.\n # The 1s are filler values.\n self.E = Constraint(1, 1, self.ee.next_edge)\n # Sets the graph type to be some graph type between 10 and 14.\n # Please read the initialize method doc for details.\n # In this case, the graph type is some form of a tree.\n self.graph_type = Constraint(10, 14)\n\ndef generate_input(self):\n ## Write generator here ##\n n = self.N.next\n yield n\n self.ee.initialize(n, self.graph_type.next)\n for i in range(n-1):\n yield self.E.next\n\n\nCase.SET_CONSTRAINTS = set_constraints\nCase.SET_INPUT = generate_input\n\n\n# Using the yaml config to create the batches:\nconfig_yaml = \"\"\"\n- batch: 1\n constraints: {N: 1~10**3-1}\n cases:\n - {}\n - {}\n - {}\n - {}\n - {}\n - {}\n\"\"\"\n\np = ConstraintParser(data=config_yaml)\np.parse()\nbatches = p.batches\n\nGenerator(batches=batches, exe='COMMAND_TO_GENERATE_OUTPUT').start()\n```\n\n\n", "description_content_type": "text/markdown", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/Ninjaclasher/testcase-generator", "keywords": "", "license": "", "maintainer": "", "maintainer_email": "", "name": "testcase-generator", "package_url": "https://pypi.org/project/testcase-generator/", "platform": "", "project_url": "https://pypi.org/project/testcase-generator/", "project_urls": { "Homepage": "https://github.com/Ninjaclasher/testcase-generator" }, "release_url": "https://pypi.org/project/testcase-generator/0.0.2/", "requires_dist": [ "pyyaml" ], "requires_python": "", "summary": "A testcase generator for creating testcases for online judges.", "version": "0.0.2" }, "last_serial": 5141966, "releases": { "0.0.1": [ { "comment_text": "", "digests": { "md5": "dbf230e43361efc4923a3029a443be9c", "sha256": "09dd6e759bd8c74616684cb8615ee82af799cf80bce44f15e39a60eab634b44d" }, "downloads": -1, "filename": "testcase_generator-0.0.1-py3-none-any.whl", "has_sig": false, "md5_digest": "dbf230e43361efc4923a3029a443be9c", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 18246, "upload_time": "2019-04-14T21:05:10", "url": "https://files.pythonhosted.org/packages/f9/83/47d0da58f96a20319cc64c6eaa7b5ee96e42c2ecd4422563415e46360c63/testcase_generator-0.0.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "f13810bcecd972258134619be67c3fd1", "sha256": "c61b8dd58bddcf5fcffeba60c03453a0401a82436c811ee31e51ee98b1cdb342" }, "downloads": -1, "filename": "testcase-generator-0.0.1.tar.gz", "has_sig": false, "md5_digest": "f13810bcecd972258134619be67c3fd1", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4964, "upload_time": "2019-04-14T21:05:12", "url": "https://files.pythonhosted.org/packages/38/05/2cb6c5fbf9af400a7248590bf388703536cb6d2d14e3785d660517bb7e29/testcase-generator-0.0.1.tar.gz" } ], "0.0.2": [ { "comment_text": "", "digests": { "md5": "9728d1c21e4d399be832345f60569c7b", "sha256": "c659b44fab0bdf978af42c4fe0a457bd192f109be84132690cde13165b156b5c" }, "downloads": -1, "filename": "testcase_generator-0.0.2-py3-none-any.whl", "has_sig": false, "md5_digest": "9728d1c21e4d399be832345f60569c7b", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 18264, "upload_time": "2019-04-14T21:16:31", "url": "https://files.pythonhosted.org/packages/3c/71/eb1546677524b3b425cb50086e88113e7c2eb77e7e99e8f0c267ba710eff/testcase_generator-0.0.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "ef08576905bbbc09d89f886df22b47fc", "sha256": "4e12dc131f584ab54dc7eea7713ea2110e8cef8f239e816594bd20fae43f5f50" }, "downloads": -1, "filename": "testcase-generator-0.0.2.tar.gz", "has_sig": false, "md5_digest": "ef08576905bbbc09d89f886df22b47fc", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4999, "upload_time": "2019-04-14T21:16:33", "url": "https://files.pythonhosted.org/packages/31/67/ed51af8a03be513566ecd6126c567264ac841846525748e624a85f0e0f87/testcase-generator-0.0.2.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "9728d1c21e4d399be832345f60569c7b", "sha256": "c659b44fab0bdf978af42c4fe0a457bd192f109be84132690cde13165b156b5c" }, "downloads": -1, "filename": "testcase_generator-0.0.2-py3-none-any.whl", "has_sig": false, "md5_digest": "9728d1c21e4d399be832345f60569c7b", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 18264, "upload_time": "2019-04-14T21:16:31", "url": "https://files.pythonhosted.org/packages/3c/71/eb1546677524b3b425cb50086e88113e7c2eb77e7e99e8f0c267ba710eff/testcase_generator-0.0.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "ef08576905bbbc09d89f886df22b47fc", "sha256": "4e12dc131f584ab54dc7eea7713ea2110e8cef8f239e816594bd20fae43f5f50" }, "downloads": -1, "filename": "testcase-generator-0.0.2.tar.gz", "has_sig": false, "md5_digest": "ef08576905bbbc09d89f886df22b47fc", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4999, "upload_time": "2019-04-14T21:16:33", "url": "https://files.pythonhosted.org/packages/31/67/ed51af8a03be513566ecd6126c567264ac841846525748e624a85f0e0f87/testcase-generator-0.0.2.tar.gz" } ] }