ARTICLE DETAIL

资讯详情

深耕商务建站与企业官网运营的一线实战洞察。

Wing 素数与数学工具链验证:从 `math.isPrime` 到 Hangar 编译快照 `prime.test.w_compile_tf-aws.md`

Wing 素数与数学工具链验证:从 `math.isPrime` 到 Hangar 编译快照 `prime.test.w_compile_tf-aws.md` 编程语言编译器云原生语言运行时【免费下载链接】wingA programming language for the cloud ☁️ A unified programming model, combining infrastructure and runtime code into one language ⚡项目地址https://gitcode.com/gh_mirrors/wi/wing点击查看免费下载本篇技术指南以 Wing 仓库中tests/sdk_tests/math/prime.test.w的编译快照为切入点讲解 Wing 标准库math.isPrime的实现原理、素数的判定边界以及 Hangar 测试框架如何把一次wing compile -t tf-aws的执行结果固化为可审计的 Markdown 快照。读完本文你将能读懂prime.test.w_compile_tf-aws.md中每一行 JSON 的含义理解纯数学函数编译到 AWS 目标平台为何产生最小化的 Terraform 配置并掌握在本地复现编译与测试的完整流程。一、快照文件是什么Hangar 的编译产物审计机制tools/hangar/__snapshots__/test_corpus/sdk_tests/math/prime.test.w_compile_tf-aws.md是 Wing 工具链测试套件 HangarHangar - Wing Toolchain Test Suite见 tools/hangar/README.md为测试文件 tests/sdk_tests/math/prime.test.w 生成的一等公民快照。文件名遵循{测试文件}_{测试用例}_{目标平台}.md的约定由 createMarkdownSnapshot 中的逻辑拼接生成const snapPath join( snapshotDir, test_corpus, dirname(relativePath), ${wingFile}_${testCase}_${target}.md );其中testCase取值为compile或testtarget取值为tf-aws或sim。因此同一份测试源码在__snapshots__下会有两份快照本文重点分析的编译快照prime.test.w_compile_tf-aws.md以及运行快照 prime.test.w_test_sim.md。快照目录的根路径由 paths.ts 定义export const snapshotDir path.join(hangarDir, __snapshots__);快照的作用是让每次 CI 运行时编译产物与运行输出都被冻结下来任何行为变更例如isPrime算法改动导致 Terraform 输出变化都会在快照比对中暴露从而实现可审计、可回放的回归测试。二、被测源码prime.test.w的双阶段断言设计快照头部链接指向的测试源码 tests/sdk_tests/math/prime.test.w 只有 21 行却完整覆盖了 Wing 语言两个阶段的验证模式bring math; assert(math.isPrime(1) false); assert(math.isPrime(2) true); assert(math.isPrime(3) true); assert(math.isPrime(4) false); assert(math.isPrime(10) false); assert(math.isPrime(11) true); assert(math.isPrime(12) false); test inflight prime numbers { assert(math.isPrime(1) false); assert(math.isPrime(2) true); assert(math.isPrime(3) true); assert(math.isPrime(4) false); assert(math.isPrime(10) false); assert(math.isPrime(11) true); assert(math.isPrime(12) false); }preflight 阶段文件顶层7 条assert在编译/部署前的编排阶段立即执行验证isPrime在 preflight 上下文中可直接调用inflight 阶段test inflight prime numbers代码块同样的 7 条断言在运行时simulator 或云端函数中执行验证isPrime同样可以进入运行时闭包。测试用例的选择很有代表性1是特殊的边界既非素数也非合数2是最小素数4是最小合数10/11/12覆盖了合数-素数-合数的连续区间能有效检验算法对平方根边界sqrt(4) 2的处理是否正确。三、底层实现math.isPrime的算法与边界语义isPrime的实现位于 SDK 数学模块 packages/winglang/sdk/src/math/math.tspublic static isPrime(n: number): boolean { if (n 1) { return false; } for (let i 2; i Math.sqrt(n); i) { if (n % i 0) { return false; } } return true; }从源码可以得出三点明确语义n 1一律返回false包括0、1与负数。1按数学惯例既不是素数也不是合数这里统一按非素数处理与测试中的assert(math.isPrime(1) false)完全吻合试除上限为Math.sqrt(n)只需检查到n的平方根即可判定这是经典的试除法优化。isPrime(4)时i 2恰好命中sqrt(4)返回falseisPrime(11)时sqrt(11) ≈ 3.316试除2、3均不整除最终返回true输入为num类型Wing 的num对应 IEEE 754 双精度浮点数因此从源码结构看该实现并未对小数、NaN、Infinity等非常规输入做显式防御实际使用中应以正整数调用为主。SDK 中Util类还提供了abs、sqrt、factorial、fibonacci、combinations等 40 余个静态方法packages/winglang/sdk/src/math/math.tsisPrime是其中唯一负责素数判定的函数。官方 API 文档对它的签名为bring math; math.isPrime(n: num);参数n为待判定素性的数字返回值boolean见 docs/api/04-standard-library/math/api-reference.md。四、逐行解读main.tf.json为什么一个素数测试只产出 5 行 Terraform快照正文只有一节## main.tf.json完整内容如下{ //: { metadata: { backend: local, stackName: root }, outputs: {} }, provider: { aws: [ {} ] } }这份 JSON 是wing compile -t tf-aws在 compileTest 流程中从target/prime.test.w.tfaws/main.tf.json读取并清洗后写入快照的。逐层解读//.metadataCDKTF 生成的元信息块声明后端为local、栈名为root。注意sanitize_json_paths会删除其中的version字段tools/hangar/src/utils.ts避免 CDKTF 版本变化污染快照//.outputsTerraform 输出定义此处为空对象{}说明prime.test.w没有声明任何对外输出provider.aws空对象数组[{}]表示只注册了 AWS provider未绑定任何具体资源配置。这份最小化的 Terraform 恰好印证了 Wing 的架构特性math是纯函数式标准库isPrime既不需要云资源bucket、queue、function也不产生状态与权限绑定。它要么在 preflight 阶段作为普通 JS 调用执行要么在 inflight 闭包中被序列化进运行时函数体。由于测试文件没有声明任何cloud.*资源Terraform 合成结果自然只剩 provider 骨架——这正是无资源即零资源声明的直观体现。对比同一目录下其他快照如bucket、queue相关测试的_compile_tf-aws.md凡是声明了云资源的测试其main.tf.json中都会出现resource键与具体的aws_*资源块而prime.test.w的快照中没有resource字段从快照体系层面反证了 math 模块的零资源属性。五、快照生成流水线从命令行到 Markdown快照不是手写的而是由 Hangar 的 vitest 用例驱动生成的。以compile为例关键流程如下1. 组装 CLI 命令。compileTest固定使用tf-aws平台tools/hangar/src/generated_test_targets.tsrunWingCommand将其展开为wing --no-update-check --no-analytics compile prime.test.w -t tf-aws命令在测试文件所在目录执行tools/hangar/src/utils.ts并捕获stdout/stderr若退出码非 0 则测试失败。2. 读取并清洗产物。编译完成后sanitize_json_paths会按顺序对main.tf.json做规范化处理tools/hangar/src/utils.ts将asset.*键替换为ASSET_KEY占位符将assets/...、source: ...、filemd5(...)等含绝对路径的字段替换为ASSET_SOURCE、SOURCE等占位符删除terraform顶层键规避 Terraform 版本差异删除元数据中的version字段。正是这套清洗规则保证了快照内容与运行机器的绝对路径、CDKTF 版本无关只保留语义稳定的部分——这也是为什么prime.test.w_compile_tf-aws.md能保持 20 行的简洁体积。3. 落盘快照。createMarkdownSnapshot按标题 代码块格式生成 Markdown头部链接自动回指向测试源文件tools/hangar/src/utils.ts并通过toMatchFileSnapshot与已存快照比对tools/hangar/src/utils.ts。4. 运行快照的生成路径略有不同。testTest使用sim平台、WING_HIDE_CONTAINER_LOGS1环境变量执行wing test只记录stdout.log/stderr.logtools/hangar/src/generated_test_targets.ts。prime.test.w_test_sim.md中的输出即为其结果pass ─ prime.test.wsim » root/Default/test:inflight prime numbers Tests 1 passed (1) Snapshots 1 skipped Test Files 1 passed (1) Duration DURATION其中DURATION是sanitizeOutput对耗时文本的标准化占位符tools/hangar/src/utils.ts说明inflight prime numbers测试用例在 simulator 中运行并通过7 条 inflight 断言全部成立。六、本地复现三步验证素数测试与快照内容如果你想在本地亲自跑通这条验证链路操作步骤如下1. 编译到 tf-aws核对 Terraform 输出wing compile tests/sdk_tests/math/prime.test.w -t tf-aws编译成功后检查tests/sdk_tests/math/target/prime.test.w.tfaws/main.tf.json其内容未经清洗的原始版应与快照结构一致provider.aws为空数组、无resource块。2. 运行测试确认双阶段断言通过wing test tests/sdk_tests/math/prime.test.w输出应包含pass ─ prime.test.wsim » root/Default/test:inflight prime numbers同时 preflight 阶段的 7 条assert会在加载阶段静默通过任一断言失败都会导致编译/运行直接报错退出。3. 若需参与快照更新仅针对仓库贡献者修改实现或测试后通过 Hangar 的 vitest 用例重新生成快照比对git diff确认prime.test.w_compile_tf-aws.md与prime.test.w_test_sim.md的变化是否符合预期。注意当前仓库为只读镜像以上命令仅为本地验证目的仓库内的快照文件不允许直接修改。七、总结prime.test.w_compile_tf-aws.md虽然只有 20 行却串联起了 Wing 工具链的三层事实语言层math.isPrime是可在 preflight 与 inflight 双阶段调用的标准库静态函数算法采用平方根试除法n 1一律判定为非素数编译层纯函数式 math 模块编译到tf-aws平台不产生任何云资源Terraform 输出仅为 provider 骨架这是 Wing按需生成基础设施设计在快照中的直接体现工程层Hangar 通过runWingCommandsanitize_json_pathscreateMarkdownSnapshot的流水线把编译与运行结果固化为路径确定、内容稳定的 Markdown 快照为 SDK 行为变更提供回归防线。相关文件可继续深入阅读tests/sdk_tests/math/prime.test.w、packages/winglang/sdk/src/math/math.ts、tools/hangar/src/generated_test_targets.ts、tools/hangar/src/utils.ts、docs/api/04-standard-library/math/api-reference.md。赞分享编程语言编译器云原生语言运行时【免费下载链接】wingA programming language for the cloud ☁️ A unified programming model, combining infrastructure and runtime code into one language ⚡项目地址https://gitcode.com/gh_mirrors/wi/wing点击查看免费下载相关推荐Wing 标准库 math.isPrime 素数检测从实现原理到 hangar 测试快照全解析Wing 标准库 math.isPrime 素数检测从实现原理到 hangar 测试快照全解析 本篇文章以 Wing 语言标准库 math 模块的素数检测函数编程语言编译器云原生语言运行时Wing cloud.Function 编译到 AWS Lambda 的 Terraform 产物解析——基于 hangar 快照 invoke.test.w_compile_tf-aws.mdWing cloud.Function 编译到 AWS Lambda 的 Terraform 产物解析——基于 hangar 快照 invoke.test.w_编程语言编译器云原生语言运行时Wing 语言 math.log10 对数计算实战从标准库实现到 hangar 快照编译验证Wing 语言 math.log10 对数计算实战从标准库实现到 hangar 快照编译验证 math.log10 是 Wing 标准库 math 模块中用于编程语言编译器云原生语言运行时创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表
PREV
查看更多资讯
NEXT
返回资讯列表