comparison 設計

comparison は src/comparison.mbt にある区間ヘルパー clamp と is_between を保持します。このページでは、両者が共有する約束と、保守者が安定に保つべき挙動を記録します。

約束

  • どちらの関数も値を最初に受け取り、その後に境界を min、max の順で受け取る。
  • 区間は閉区間であり、境界に等しい値は区間に含まれる。
  • 制約は Compare だけなので、これらの関数は luna-generic に依存せず、String を含む任意の順序付きの型に使える。
  • 境界は検証しない。min > max のときもどちらの関数も中断せず、その場合の戻り値は API リファレンスに記載している。

整合性

min <= max のとき、is_between(v, min, max) が true になるのは、clamp(v, min, max) が v を返すときに限られる。どちらかの関数を変更するときは、この関係を保たなければならない。

保守メモ

  • 関数を追加・削除したとき、あるいは制約や境界的な場合の挙動が変わったときは、このページと API リファレンス を更新し、moon info で src/pkg.generated.mbti を再生成する。
  • 境界の検証を導入すると上記の挙動が変わるため、導入する場合はここに記載する。