Skip to content

Releases: ia-toki/tcframe

v1.7.0

24 Nov 14:27
Compare
Choose a tag to compare

Bugfixes

  • Fixed a bug where RAW_LINES() accumulates size over sample test cases.

Enhancements

  • Use C++17 by default for tcframe build.

New features

  • Allow scorer/communicator to output percentage of full points (OK\nP%).

v1.6.0

17 Sep 05:32
Compare
Choose a tag to compare

Bugfixes

  • Fixed a bug where tcframe crashed when grading spec with multiple test cases mode, which has no sample test cases.
  • Fixed a bug where a LINE() with only jagged vector contained an extra leading space.
  • Fixed a bug where a LINES() with empty vectors contained extra spaces.

Enhancements

  • Disallow specifying SIZE() after LINE() and RAW_LINE() instead of silently ignoring it.

v1.5.0

16 Jul 08:42
Compare
Choose a tag to compare

Bugfixes

  • Fixed a bug where the spec file cannot be compiled when its absolute path contains spaces.

New features

  • It is now possible to specify additional compilation flags, by setting the $TCFRAME_CXX_FLAGS environment variable.

v1.4.0

29 May 09:57
Compare
Choose a tag to compare

New features

  • Interactive problems are now supported.
  • It is now possible for scorers to specify partial points, by outputting OK\n<points>\n.
  • It is now possible to assign points to subtasks.
  • It is now possible to specify more than one output formats.
  • Local grading now supports additional --brief argument to make the output concise.

v1.3.0

10 Feb 07:56
Compare
Choose a tag to compare

New features

  • Subtask IDs specified by Subtasks() in TestCases() or TestGroupX() are now validated. It is an error now if you specify non-existing subtasks.
  • BeforeOutputFormat() can be used to set the value of output variables that depend on input variables.

v1.2.1

29 Jan 15:59
Compare
Choose a tag to compare

Bugfixes

  • Fixed a regression when I/O format segments do not pick up correct sizes if the sizes contain expressions that contain I/O variables. The value of the variables were evaluated the first time they were read.

    For example, if you declare SIZE(N - 1), it would always evaluate to SIZE(-1) (N = 0), which is incorrect. It is now fixed.

    Note that if the expression contains only a single variable (e.g. SIZE(N)), it is not affected and has always been correct.

v1.2.0

16 Dec 11:28
Compare
Choose a tag to compare

Bugfixes

  • Fixed a regression when the final verdict of local grading of problems without subtasks is always AC.

New features

  • It is now possible to write a custom program that checks whether the contestant's output is correct (instead of just comparing it with the official output). This is called custom scorer program.
  • It is now possible not to generate test case output (.out) files.

v1.1.0

04 Dec 11:26
Compare
Choose a tag to compare

New features

  • It is now possible to omit SIZE() for a LINES() segment, as long as it is the last segment in an I/O format.
  • Brand new segments: RAW_LINE() and RAW_LINES(), which accept strings containing whitespaces.

Enhancements

  • I/O format errors after a vector/matrix now have the last indices reported in the error message. For example,

    Before:

    Expected: <newline> after 'D'
    

    Now:

    Expected: <newline> after 'D[1]'
    

v1.0.1

28 Nov 01:42
Compare
Choose a tag to compare

Bugfixes

  • Fixed a regression when I/O format segments do not pick up correct sizes taken from I/O variables.
  • Fixed a regression when std::string cannot be used as variable type.

v1.0.0

26 Nov 20:52
Compare
Choose a tag to compare

First stable release. Almost a complete rewrite from 0.x. Focusing on syntax improvements and conceptual refinements.

BREAKING CHANGES

  • Minimum GCC version is now 4.8.
  • The source file of a runner program is now conceptually called "spec file", and is called spec.cpp instead of runner.cpp.
  • A spec file now includes <tcframe/spec.hpp> instead of <tcframe/runner.hpp>.
  • main() function in a spec file is not needed and must be removed.
  • Problem specification is now called a "problem spec", and its class is ProblemSpec instead of Problem. It now inherits BaseProblemSpec.
  • Generator specification is now called a "test spec", and its class is TestSpec instead of Generator. It now inherits BaseTestSpec.
  • The container directory of a spec file is now conceptually called "problem package directory".
  • The slug for a problem is now taken from the name of the problem package directory, and cannot be overridden via problem spec or command-line option.
  • Config() in test spec is removed, so it is not possible to e.g. specify the solution command and test cases output directory in test spec.
  • Config() in problem spec is split into GradingConfig() and MultipleTestCasesConfig().
  • setTimeLimit() and setMemoryLimit in problem spec's Config() are now TimeLimit() and MemoryLimit() in GradingConfig().
  • setMultipleTestCasesCount() in problem spec's Config() is now Counter() in MultipleTestCasesConfig().
  • assignToSubtasks() in test groups is now Subtasks().
  • Individual sample test cases now live in their own methods, SampleTestCaseX() where X is sample test case number.
  • SAMPLE_CASE() is split into multiple calls: Subtasks(), Input(), and Output().
  • FinalizeInput() is renamed to AfterTestCase().
  • "Submission simulation" is now conceptually called "local grading".
  • ./runner submit is now ./runner grade.
  • --brief option for local grading is removed until there is clear use case for it.
  • --slug option is removed.
  • --solution-command option is simplified to --solution.
  • --tc-dir option is renamed to --output.

New features

  • tcframe helper script is introduced. It currently has 2 commands: tcframe build, which compile a spec file into a runner program, and tcframe version, which prints current tcframe version.
  • A summary is printed after generation/grading, which shows whether or not there are failing test cases.
  • It is now possible to specify the literal output for sample test cases, by calling Output() inside SampleTestCaseX().
  • BeforeTestCase() to complement the new AfterTestCase(), which can be used to initialize input variables before each test case.
  • For problems with subtasks, Constraints() can be used to specify global constraints that apply to every subtask.
  • In ICPC-style multiple test cases in a file problems, it is now possible to specify a prefix that will be prepended to every output, by calling OutputPrefix() (e.g. OutputPrefix("Case #%d ");).

Enhancements

  • Maximum X for TestGroupX(), SubtaskX() (and the new SampleTestCaseX()) is now 25.
  • If there are errors in I/O format, previously the error was shown in every test case, resulting in spammy output. Now, it is reported only once before the test cases are evaluated.

Bugfixes

  • When using multiple test groups in ICPC-style multiple test cases in a file problems, it was erroneously required to call assignToSubtasks({-1}). Now, it is not required.
  • In e.g. this input segment LINE(A % SIZE(3), B), when B is not a supported type, tcframe reported the error as Variable type of%unsatisfied... due to a tokenization bug. It is now fixed.

Project development

  • Repository moved to https://github.com/tcframe/tcframe.
  • (Almost) every class now lives on its own file.
  • Rewrite almost everything with better testability in mind. Now, we have decent unit tests.
  • Use Google Test and Google Mock for unit tests.
  • Add basic end-to-end tests for generation and local grading.