caesar_cipher_enc_dec 1.0.10

can easily use caesar cipher
Documentation
---
description: テスト作成ルール・Rust(等価分割・境界値・Given-When-Then)
alwaysApply: false
globs: **/*.rs,**/tests/**
---

# テスト作成ルール(共通)

テストコードの新規作成・追加・修正時は、言語固有ルールとあわせて本セクションを適用する。

## 1. 事前確認

- テストが必要かどうか不明な場合は、**AskUserQuestion** で確認すること。
- 着手前に以下を把握すること:
  - 言語・ランタイム
  - テストフレームワーク(プロジェクト既存のものを優先)
  - 既存のテストディレクトリ・命名規則・フィクスチャの置き場所

## 2. 必須プロセス

1. **テスト観点の表**(等価分割・境界値)を Markdown 表で**先に**提示する。
2. 表に基づいてテストコードを実装する。
3. **失敗系を正常系と同数以上**含める。
4. 以下を必ず網羅する:
   - **正常系** — 主要シナリオ・代表入力
   - **異常系** — バリデーション失敗・エラー返却・例外
   - **境界値** — 0、最小、最大、±1、空、NULL / `None`、空コレクション
   - **不正入力** — 型・形式・範囲の不正さ
   - **外部依存の失敗** — 該当する場合(モック・フェイクの前提を明示)
   - **エラー内容の検証** — 例外種別・エラーメッセージ・エラーコード
5. 各テストケースに **Given / When / Then** 形式のコメントを付ける。
6. 回答末尾に **実行コマンド** と **カバレッジ取得方法** を記載する。
7. **目標: 分岐網羅 100%**(不足観点は実装前に表へ追記する)。

## 3. 変更時の必須確認

- コード修正を行ったら、**必ず**テストを実行して結果を確認する。
- 既存テストが落ちないこと。仕様変更はテストとドキュメントを同時に更新する。
- フレークのないテストにする(時刻・乱数・並列は固定シード・モックで制御)。


---

# テスト作成ルール(Rust)

上記「テスト作成ルール(共通)」に加え、Rust プロジェクトでは以下を適用する。

## 4. テストの種類と配置

| 種類 | 置き場所 | 用途 |
|---|---|---|
| ユニットテスト | 対象 `.rs` 内の `#[cfg(test)] mod tests` | 純粋関数・小さなモジュール |
| 統合テスト | クレート直下 `tests/*.rs` | 公開 API・複数モジュールの連携 |
| ドキュメントテスト | `///` コードブロック | 使用例・仕様の固定 |

- 新規統合テストは `tests/` に **1 ファイル 1 テーマ**で追加する(`tests/foo.rs`)。
- テスト専用ヘルパーは `tests/common/mod.rs` または `#[cfg(test)]` に置く。
- 既存の `proptest` 等があれば、その構成を優先する。

## 5. 実装の書き方

- アサーションは `assert!` / `assert_eq!` / `assert_matches!` を使い、失敗時に期待値が分かるメッセージを付ける。
- エラー系は `Result::Err`・`Option::None` を明示的に検証する。
- パニック期待は `#[should_panic]` または `catch_unwind` を使い、理由をコメントする。
- 非同期は `#[tokio::test]` 等、プロジェクト既存のマクロに合わせる。
- `unwrap()` は **テストコード内のみ** 許容。本番コードに `unwrap` を増やしてテストしやすくしない。

### 例

```rust
#[cfg(test)]
mod tests {
    use super::*;

    #[test]
    fn parses_valid_hex() {
        // Given: 32文字の16進文字列
        // When: parse_hex_input を呼ぶ
        // Then: 16バイトの Vec が返る
        let got = parse_hex_input("00112233445566778899aabbccddeeff").unwrap();
        assert_eq!(got.len(), 16);
    }
}
```

## 6. 実行コマンドとカバレッジ

回答末尾に以下を含めること。

```bash
# クレート全体
cargo test

# 特定テストのみ
cargo test parses_valid_hex

# 統合テストのみ
cargo test --test integration_name
```

カバレッジ(`cargo-llvm-cov` 等がプロジェクトにあれば):

```bash
cargo llvm-cov --html
```

ツール未導入時は、プロジェクトで採用している手段を確認してから記載する。