# Prototyping Luau ![prototyping workflow](https://github.com/Roblox/luau/actions/workflows/prototyping.yml/badge.svg) An experimental prototyping system for the Luau type system. This is intended to allow core language features to be tested quickly, without having to interact with all the features of production Lua. ## Building First install Haskell and Agda. Install dependencies: ``` cabal update cabal install --lib aeson scientific vector ``` Then compile ``` agda --compile PrettyPrinter.agda ``` and run! ``` luau-ast Examples/SmokeTest.lua | ./PrettyPrinter ``` ## Testing We have a series of snapshot tests in the `Tests/` directory. You interact with the tests using the `tests` Python script in the `prototyping` directory. To simply run the tests, run: ```sh tests --luau-cli ../build/luau-ast --build ``` This will build the test targets and run them. Run `tests --help` for information about all the command-line options. ### Adding a new test To add a new test, add it to `Tests/{SUITE_NAME}/{CASE_NAME}`. You'll need an `in.lua` file and an `out.txt` file. The `in.lua` file is the input Luau source code, while the `out.txt` file is the expected output after running `luau-ast in.lua | test_executable`. ### Updating a test If you make a change to the prototype that results in an expected change in behavior, you might want to update the test cases automatically. To do this, run `tests` with the `--accept-new-output` (`-a` for short) flag. Rather than diffing the output, this will overwrite the `out.txt` files for each test case with the actual result. Commit the resulting changes with your PR.