# Testing infrastructure in Hakaru

Unit testing has been created for Hakaru’s main functions. The test suite is managed by Cabal and written in Haskell.

Tests written to test programs written using Hakaru are located in the tests/ subdirectory at the root of the project. Tests written in Haskell to check Hakaru functionality can be found at haskell/Tests/.

## Running Tests

Hakaru can be tested by running cabal test or stack test from the root directory of the project.

Note: Tests that require Maple, such as simplify tests, are only run if a local installation of Maple is detected.

## Creating New Tests

Hakaru testing is managed in the hakaru.cabal file found in the root directory. The main file for using the test suite is TestSuite.hs, which can be found in haskell\tests.

For all tests, two programs are required – the program to test and a program representing the expected result.

### Writing Hakaru Tests

When creating Hakaru tests, your two programs must be saved as seperate files.

You can add a test of your Hakaru programs to a Haskell program by using the testConcreteFiles function from haskell/Tests/TestTools.hs. This function takes two Hakaru programs as arguments. It first runs simplify on the first file and then asserts if it is equivilant to the second file.

Haskell tests are created using the HUnit testing framework. Most existing Haskell tests use the testSStriv function from haskell/Tests/TestTools.hs. This function asserts that the first Haskell function passed to it simplifies to the same function provided by the second function argument. The simplification performed specifically calls the simplify Hakaru transform.