Skip to main content

A tool for running in-source unittests for Anwer Set Programming (ASP)

Project description

asp-selftest

In-source test runner for Answer Set Programming (ASP) with Clingo.

It provides:

* `asp-tests`: a standalone (Python) tool to run tests in a logic program.
* `bin/runasptests.sh`: Bash script to find all .lp files and run their tests.

Both tools stop at first failure.

RUNNING

After installation via pip, run it using:

$ asp-tests <file.lp> ...

Alternatively you can run it as a module, given that either the working directory of the PYTHONPATH are set to 'src':

$ python -m asp_selftest <file.lp> ...

There are options to silents the in-source Python tests etc, have a look:

$ asp-tests -h

TESTING

The code is equiped with in-source Python tests which always run. You can silence them with --silent.

TODO

To use the program without the tests: Not Yet Implemented. But you can use the base program anywhere of course, since all #programs are ignored by default.

IDEA

  1. Use #program's to identify units and their dependencies. Here we have a unit called unitA with a unit test for it called testunitA.

    #program unit_A.
    
    #program test_unit_A(unit_A).
    

    The implicit program base (see Clingo Guide) must be referenced explicitly if needed.

  2. Extend the notion of #program by allowing the use of functions instead of only constants. This allows #program units with constants being tested. Here is a unit step that is tested with constant a being substituted with 2:

    #program step(a).
    
    #program test_step(step(2)).
    

    Note that using this feature makes the program incompatible with Clingo. The test runner has an option to transform a extended program back to compatible Clingo without running the tests.

  3. Within a test program, use assert with @all to ensure universal truths that must be in every model. We use @all to communicate to the runtime that this particular assert must be checked for presence in every model. Its argument is just a name for identification.

     #program step(n).
     fact(n).
    
     #program test_step(step(3)).
     assert(@all("step fact"))  :-  fact(3).
    

    Note that "step fact" is just a way of distinquishing the assert. It can be an atom, a string, a number or anything else. Pay attention to the uniqueness in case of variables in the body. Take note of point 5 below.

  4. To enable testing constraints and to guard tests for empty model sets, we use @models to check for the expected number of models. In the example above, we would add:

     assert(@models(1)).
    
  5. Care must be taken if variables in the body lead to expansion and conjunctions. See duplicate_assert.lp. The system gives a warning for:

     assert(@all(id_uniq))  :-  def_id(Id, _, _),  { def_id(Id, _, _) } = 1.
    

    Instead you have to write:

     assert(@all(id_uniq(Id)))  :-  def_id(Id, _, _),  { def_id(Id, _, _) } = 1.
    

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

asp_selftest-0.0.13.tar.gz (21.4 kB view details)

Uploaded Source

Built Distribution

asp_selftest-0.0.13-py3-none-any.whl (21.6 kB view details)

Uploaded Python 3

File details

Details for the file asp_selftest-0.0.13.tar.gz.

File metadata

  • Download URL: asp_selftest-0.0.13.tar.gz
  • Upload date:
  • Size: 21.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.0 CPython/3.12.3

File hashes

Hashes for asp_selftest-0.0.13.tar.gz
Algorithm Hash digest
SHA256 85bf4f94026e93f6fa2a49dabed09d2302fa1a507814d67dcf9eed631b6d7900
MD5 ad1a4a0aa9a4528b9b20c98933775f4a
BLAKE2b-256 f3c685ccc72813d48aeeb6461d3caeeeebca2d7b36e47d43d770ad334b8f118c

See more details on using hashes here.

Provenance

File details

Details for the file asp_selftest-0.0.13-py3-none-any.whl.

File metadata

File hashes

Hashes for asp_selftest-0.0.13-py3-none-any.whl
Algorithm Hash digest
SHA256 e5d9d7f0e9ae1e215836e3c1140ab965b19f9e80053bbaa9a3d3cf2b018b2035
MD5 587287a60240e0e164e8dc8fe6934587
BLAKE2b-256 b642a5535b4e92d6c8916a36073ef9a1bbff50ece89044cf75ed093d89ad612a

See more details on using hashes here.

Provenance

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