원클릭으로
toolchain-tests
Instructions for authoring, structuring, and running toolchain tests using the file_test infrastructure.
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
메뉴
Instructions for authoring, structuring, and running toolchain tests using the file_test infrastructure.
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
SOC 직업 분류 기준
Instructions for registering, mapping, constant evaluating, and lowering builtin functions in the Carbon toolchain.
Instructions for declaring, formatting, emitting, testing, and styling diagnostic messages (errors, warnings, notes) in the Carbon toolchain.
Guidelines and restrictions on shell commands and file manipulation tools for AI assistants.
Instructions that **MUST** be followed when using Bazel or Bazelisk to build, test, and debug in the Carbon repository.
Instructions for using Jujutsu (jj) for version control in the Carbon repository.
Instructions for running prek, the Carbon pre-submit/style/lint checker, that *MUST* be run before submitting an change.
| name | Toolchain tests |
| description | Instructions for authoring, structuring, and running toolchain tests using the file_test infrastructure. |
This skill provides guidelines and patterns for creating and updating tests for
the Carbon toolchain, especially file tests in toolchain/*/testdata/ (for
example, toolchain/check/testdata/).
Toolchain tests evaluate Carbon source files through Lexing, Parsing, Checking, and optionally Lowering. Output (for example SemIR dumps, Clang errors) is captured and validated using inline CHECK records.
Test files must start with the standard Carbon license, followed by
configuration comments. Separate sections with blank comment lines (//).
// Part of the Carbon Language project, under the Apache License v2.0 with LLVM
// Exceptions. See /LICENSE for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
// INCLUDE-FILE: toolchain/testing/testdata/min_prelude/...
//
// AUTOUPDATE
// AUTOUPDATE is mandatory for files using CHECK markers.// TIP: lines are automatically generated by the autoupdater. You do not
need to hand-write them. It is harmless to add them, but the script will
handle it.When writing tests entirely unrelated to the Core package, specify a minimal
prelude file using // INCLUDE-FILE. Usually, include
toolchain/testing/testdata/min_prelude/ scripts, such as int.carbon or
primitives.carbon. This significantly speeds up execution and minimizes STDOUT
noise.
+, -, /,
<, etc.) are not imported or available inside minimized preludes. To
write tests with a minimal prelude footprint, call primitive builtins
directly (e.g., float.negate, float.div) inside your test code to build
expressions.[[@TEST_NAME]]A single physical file can test multiple scenarios using split constraints:
// --- passing_case.carbon
library "[[@TEST_NAME]]";
// ...
// --- fail_bad_case.carbon
library "[[@TEST_NAME]]";
// ...
library "[[@TEST_NAME]]"; in each split rather than
hardcoding the library name. This prevents name conflicts, avoids redefining
the default library, and keeps the test code clean and templateable.[[@TEST_NAME]] (including the brackets) must be used. The test
infrastructure automatically replaces it with the split's filename minus
todo_ and fail_ prefixes.fail_ and todo_Expected failures must be differentiated from unexpected failures (and from bugs). Include prefixes to name individual split files or the main test:
fail_...: The test should and does produce compiler errors.todo_fail_...: The test should produce errors but currently does not.fail_todo_...: The test does produce errors or crashes, but it shouldn't
(or produces the wrong errors or otherwise misbehaves with errors).todo_...: The test has some incorrect behavior, but doesn't produce errors
currently, and shouldn't.Main File Naming: The main test file (and any split-files) must have a
fail_ prefix if they have an associated error. Exception: The main file
may omit fail_ if it contains a least one split that has a fail_ prefix.
Both the fail_ and todo_ prefixes are stripped from filename properties like
[[@TEST_NAME]].
When testing constant evaluation in semantic checker tests, follow these conventions to ensure diagnostic stability and accuracy:
Expect(X as f64) function).0x1.0000000000001p0) or a highly
precise decimal fractional spelling (e.g. 1.0000000000000001) instead of
coarse fractions like 1.1 to ensure correct boundary assertions.i32 or u32).0 and 0.0
explicitly. Assert that zero inputs are sized and simplified correctly
without triggering calculation underflows, division-by-zero errors, or
underestimating required bit allocations.Limit STDOUT checks to the logic under test. Always use //@dump-sem-ir-begin
and //@dump-sem-ir-end around the specific declarations/blocks where SemIR
output is desired. Only use these markers and not
--dump-sem-ir-ranges=if-present or similar extra args—new tests use
//@dump-sem-ir... to naturally filter output to the highlighted segments based
on the default behavior.
//@dump-sem-ir-begin
fn F(x:? form(ref i32));
//@dump-sem-ir-end
AI tools should never hand-write or manually touch // CHECK:STDOUT: or
// CHECK:STDERR: comments.
Write your Carbon test code, headers, and // AUTOUPDATE then run the test
updater:
./toolchain/autoupdate_testdata.py toolchain/PATH/TO/YOUR/TEST.carbon
Review the updated test outputs (for example, by way of git diff). Ensure
logic paths are correctly tested rather than producing massive boilerplate
blocks.