app json(任意の依存)
├── lib.core ──private──▶ lib.json (feature.json のとき)
├── bin.app ──target───▶ lib.core
└── test.config ─target──▶ lib.core
[features] の宣言は次のとおり。
default = ["fast"]
fast = ["simd"]
simd = []
trace = []
json = []
match cfg.opt の全てのアーム。 --config を切り替えると
APP_OPT が変わる。単一の構成では片方のアームしか通らないmatch。 具体化した結果は列の中の列になる。
1段しか解かないと、check も dowel why も通るのにコンパイル引数にだけ
現れない(この形で欠陥が発覚した)fast は simd を有効にする。--features=fast だけを
渡しても APP_SIMD が立つこと--no-default-features で連鎖ごと消えること--features=trace で fast も残ることjson が依存グラフに現れない--features=json で APP_JSON が立ち、
core からは json の公開ヘッダが見えることjson は core の非公開依存であり、
core を使う bin.app へ JSON_API が漏れてはならない1〜5 と 8 は C 側の #error と終了状態で書いてある。6 と 7 のうち
依存グラフに関わる部分は C から観測できないため、ハーネス側にある。
opt=0 fast=1 simd=1 trace=0 json=0
構成ごとの期待値は crates/dowel-cli/tests/fixture.rs の
configured_reflects_every_configuration にある。
app/tests/config_test.c は、この行とコンパイル時に見えている識別子が
一致することを確かめる。同じ構成から2通りに導いて突き合わせるため、
期待値をハーネスと二重に持たない。