本文へ移動
Hikari 仕様

std:assert — アサーション

標準ライブラリモジュール (index.md)。本書中の裸の §N は本書の節を指す。言語の意味論は ../language-spec.md を参照。テストランナー (hikari test) との関係は ../test.md を参照。

import assert := "std:assert"equal / not_equal / ok / length / empty / fail の 6 slot を持つ namespace object を assert に束縛する。値の検査に用い、条件を満たさないとき panic (Error, language-spec.md §16) を投げる。

std:test依存しないstd:fs / std:term と違い I/O を伴わず、純粋・同期 (Future を返さない)。REPL・playground・hikari runhikari test のいずれからも同じように使える。

import assert := "std:assert"

assert.equal(1 + 1, 2)          # 通過 (何も起きない)
assert.ok ("a" < "b")           # 通過
assert.equal(1 + 1, 3)          # panic: assert.equal: expected 3, got 2
名前 pass 条件 失敗メッセージ例
equal equal(actual, expected) actual == expected (language-spec.md §9.1。ユーザー定義 == スロットも尊重) assert.equal: expected 3, got 4
not_equal not_equal(a, b) a == b が偽 assert.not_equal: expected values to differ, both 3
ok ok(cond) condtrue (Bool、language-spec.md §9.3) assert.ok: expected true, got false
length length(coll, expected) coll の長さが expected (Int) と等しい (§3) assert.length: expected length 3, got 2 ([1, 2])
empty empty(coll) coll の長さが 0 (§3) assert.empty: expected empty, got length 2 ([1, 2])
fail fail(message) (常に失敗) message

本モジュールは効果を1 つも持たない../language-spec.md §17.9)。

両辺・実値の表示は各値の Inspect を用いる。

1. 失敗の伝播

  • アサーション失敗はすべて panic (Error) として起こる。回復可能エラー (Result / {kind, message}) ではない。
  • std:testrun の中 (Trial の block 内) で失敗した場合は、run がその Trial の境界で捕捉し FAIL として記録する (test.md §2)。
  • run の外 (REPL への直接入力・hikari run の通常コード等) で失敗した場合は、通常の panic としてトップレベルまで伝播し、診断付きで停止・非ゼロ終了する (language-spec.md §16.1)。

2. ok の引数型

  • ok(cond)cond は Bool。非 Bool を渡すこと自体が型不一致 panic になる (assert.ok の失敗メッセージではなく、language-spec.md §16 の型 contract 違反)。

3. length / empty の対象

  • coll の長さは言語のメンバー解決 (language-spec.md §3.2) と同じ順で得る: coll がオブジェクトで length スロットを持てばそれを呼び、なければ受け手の型の組込 length メソッド (String / Bytes / List / Tuple / Range、std:map / std:set / std:array の各コレクション) を呼ぶ。
  • どちらも持たない値 (Int 等) を渡すこと自体が型不一致 panic (language-spec.md §16 の型 contract 違反)。length の結果が Int でない場合も同様。
  • length(coll, expected)expected は Int。非 Int は型不一致 panic。
  • 失敗メッセージには実際の長さと collInspect を併記する (上表)。