MikolajKolek / toster

A simple-as-toast tester for C++ solutions to competitive programming exercises
MIT License
20 stars 2 forks source link
cli competitive-programming cpp rust testing

Toster

Crates.io Crates.io Crates.io

A simple-as-toast tester for C++ solutions to competitive programming exercises

Usage

Usage: toster [OPTIONS] <FILENAME>

Arguments:
  <FILENAME>  The name of the file containing the source code or the executable you want to test

Options:
  -i, --in <IN>
          Input directory [default: in]
      --in-ext <IN_EXT>
          Input file extension [default: .in]
  -o, --out <OUT>
          Output directory [default: out]
      --out-ext <OUT_EXT>
          Output file extension [default: .out]
      --io <IO>
          The input and output directory (sets both -i and -o at once)
  -c, --checker <CHECKER>
          The C++ source code or executable of a checker program that verifies if the tested program's output is correct instead of comparing it with given output files
          The checker must use the following protocol:
          - The checker receives the contents of the input file and the output of the tested program on stdin, separated by a single "\n" character
          - The checker outputs "C" if the output is correct, or "I <OPTIONAL_DATA>" if the output is incorrect. The optional data can include any information useful for understanding why the output is wrong and will be shown when errors are displayed
  -t, --timeout <TIMEOUT>
          The number of seconds after which a test or generation (or checker if you're using the --checker flag) times out if the program does not return. WARNING: if you're using the sio2jail flag, this timeout will still work based on time measured directly by toster, not time measured by sio2jail [default: 5]
      --compile-timeout <COMPILE_TIMEOUT>
          The number of seconds after which compilation times out if it doesn't finish [default: 10]
      --compile-command <COMPILE_COMMAND>
          The command used to compile the file. <IN> gets replaced with the path to the source code file, <OUT> is the executable output location [default: "g++ -std=c++20 -O3 -static <IN> -o <OUT>"]
  -s, --sio2jail
          Makes toster use sio2jail for measuring program runtime and memory use more accurately. By default limits memory use to 1 GiB. WARNING: enabling this flag can significantly slow down testing
  -m, --memory-limit <MEMORY_LIMIT>
          Sets a memory limit (in KiB) for the executed program and enables the sio2jail flag. WARNING: enabling this flag can significantly slow down testing
  -g, --generate
          Makes toster generate output files in the output directory instead of comparing the program's output with the files in the output directory
  -h, --help
          Print help
  -V, --version
          Print version

Compiler

If you're using the sio2jail feature and want to make sure that your toster measurements are exactly identical to those of sio2 on a contest, you need to make sure that you're using the same compiler version as the one used in sio. The compiler used in the Polish Olympiad in Informatics as of XXXI OI is G++ 12.2 (as detailed here). If you want to install G++ 12.2, you can do so by building it from scratch (for example using this script, only changing the version). You can also download prebuilt G++ versions made by me from here:

License

Toster is licensed under the MIT Licence

Dependencies

Toster uses sio2jail, a project available under the MIT licence