本技能介绍如何使用命令行`gh`只读查看GitHub issue正文和评论,支持通过编号或URL定位,也可指定其他仓库,并说明如何提取大量评论。
- 查看issue正文和评论
- 通过URL读取issue
- 查看其他仓库的issue
本指南介绍如何用 `file_test` 编写、组织和运行 Carbon 工具链测试,涵盖文件头、拆分用例、失败前缀、筛选 SemIR 输出,以及通过更新脚本重新生成预期结果。
Instructions for authoring, structuring, and running toolchain tests using the file_test infrastructure.
实测评分 未实测
查看安装方法本技能介绍如何使用 file_test 为 Carbon 工具链创建、组织和运行测试。内容包括标准文件头、配置注释、最小化前置文件,以及在一个物理文件中拆分多个测试用例。它说明如何使用 fail_、todo_ 等前缀标记预期失败或当前行为不正确的测试。还会介绍如何用标记将 SemIR 输出限制在指定声明附近,以及如何运行 ./toolchain/autoupdate_testdata.py 重新生成预期的标准输出和标准错误。
新增或修改 Carbon 编译器功能并需要编写对应测试时,可以参考本指南。它适用于区分通过用例和验证失败的用例、控制捕获输出的范围,以及编写稳定的常量求值测试,包括边界值测试。
file_test,并分别设置通过和失败用例。”本指南针对 Carbon 工具链测试。不要手动编辑 // CHECK:STDOUT: 或 // CHECK:STDERR: 行;应运行 ./toolchain/autoupdate_testdata.py 更新,再确认新输出是否体现了预期行为。语言服务器测试采用不同规则,应参考对应技能。
本介绍由 AI(OpenAI Codex)根据公开的 SKILL.md 撰写。准确的规格请查看下方原文。
AI 根据 SKILL.md 的内容检查了需要注意的操作和使用前提。评分只依据实际运行的结果(实测对比)。
不计入评分。 由 AI(OpenAI Codex)于 2026年10月26日 评估。仅供参考,安装前请同时查看原文。
安装前可以查看交给 AI 代理的指令内容。
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.
Language server tests also use file_test, but with quite different
conventions (an LSP message stream, AUTOUPDATE-SPLIT, FROM_FILE_SPLIT).
Refer to the Language server skill
(SKILL.md) for those.
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.
Autoupdating makes the tests pass whether or not the new behavior is correct, so deciding that the new output is the output you wanted is a separate step. See the Review testdata changes skill.
还没有评价。欢迎分享你的使用感受。
无需登录即可发表。欢迎分享使用感受、提问,或说明在哪些环境下无法运行。
还没有评论。来写第一条吧。
本技能介绍如何使用命令行`gh`只读查看GitHub issue正文和评论,支持通过编号或URL定位,也可指定其他仓库,并说明如何提取大量评论。
本技能为在 Carbon 代码库中工作的 AI 助手规定文件查看、搜索和编辑工具,并说明临时文件的存放与清理规则,以及何时可以编写和运行自定义程序。
了解如何在 Carbon 项目中通过 Bazelisk 构建、测试和运行程序,包括指定目标、启用 ASan,以及系统依赖变更后重建缓存。
本技能介绍如何为Carbon编译器添加内置函数,包括类型注册、签名验证、常量求值、运行时LLVM IR生成、Prelude绑定,以及使用最小Prelude编写针对性测试。
了解 Carbon 工具链对 Bazel、C++、Carbon、Markdown 和 Python 文件的格式规范,并查看注释、文档、命名、设计及提交说明的写作要求。
本技能介绍如何在Carbon工具链中添加或修改错误和警告,包括注册诊断类型、用带类型的参数构造消息、为源码位置添加标签和上下文,以及检查措辞规范和测试覆盖。