Releases: ia-toki/tcframe
Releases · ia-toki/tcframe
Version 1.6.0
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()
afterLINE()
andRAW_LINE()
instead of silently ignoring it.
Version 1.5.0
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.
Version 1.4.0
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.
Version 1.3.0
New features
- Subtask IDs specified by
Subtasks()
inTestCases()
orTestGroupX()
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.
Version 1.2.1
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 toSIZE(-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.
Version 1.2.0
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.
Version 1.1.0
New features
- It is now possible to omit
SIZE()
for aLINES()
segment, as long as it is the last segment in an I/O format. - Brand new segments:
RAW_LINE()
andRAW_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]'
Version 1.0.1
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.
Version 1.0.0
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 ofrunner.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 ofProblem
. It now inheritsBaseProblemSpec
. - Generator specification is now called a "test spec", and its class is
TestSpec
instead ofGenerator
. It now inheritsBaseTestSpec
. - 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 intoGradingConfig()
andMultipleTestCasesConfig()
.setTimeLimit()
andsetMemoryLimit
in problem spec'sConfig()
are nowTimeLimit()
andMemoryLimit()
inGradingConfig()
.setMultipleTestCasesCount()
in problem spec'sConfig()
is nowCounter()
inMultipleTestCasesConfig()
.assignToSubtasks()
in test groups is nowSubtasks()
.- 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()
, andOutput()
.FinalizeInput()
is renamed toAfterTestCase()
.- "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, andtcframe 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()
insideSampleTestCaseX()
. BeforeTestCase()
to complement the newAfterTestCase()
, 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 newSampleTestCaseX()
) 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)
, whenB
is not a supported type, tcframe reported the error asVariable 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.
Version 0.7.0
New features
- #58: Allow omitting
OutputFormat()
and disable output format checking . - #61: Support jagged vector as the last input variable in a
LINES()
segment.
Project development
- #60: Use shields.io for service badges.
- #59: Restructure documentation based on https://jacobian.org/writing/great-documentation/.