---
generated_at: 2026-02-19 10:30:00
metrics:
  claims_total: 100
  claims_with_evidence: 98
  claims_without_evidence: 2
confidence_derived: 0.98
---

# 根拠レポート：cpp-core単体テストケース一覧

## 本レポートについて

### 目的
本レポートは、生成された単体テストケース一覧の信頼性を検証し、人間レビュアーが効率的にレビューできるようにすることを目的としています。

### チェック方法
以下の観点でドキュメントの内容（Claim：主張）を検証しています：

1. **根拠の有無確認**：各主張に対して、ソースコード・既存設計書・要件定義書などの根拠（Evidence）が存在するか
2. **根拠との整合性**：主張の内容が根拠と矛盾していないか
3. **網羅性**：参照すべき情報源を適切にカバーしているか

### 信頼度スコアの算出
- **confidence_derived** = 根拠あり件数 / 総主張件数
- 状態「○」：根拠あり、「△」：根拠不足または要確認

### 本レポートの使い方
1. まず「サマリー」で全体の信頼度と優先レビュー項目を確認
2. 「Claims と根拠の対応」で △ の項目を重点的にレビュー
3. 「不足情報」で補完が必要な情報源を確認

---

## 1) サマリー（まず見るところ）
- 総合信頼度（derived）：**0.98**
  - 根拠あり：98 / 100、根拠なし：2
- 優先レビュー（高）
  1. **UT-CPP-016**：dplyr_cummeanのNA処理は実装コードでは明示的に処理されていない
  2. **UT-CPP-071**：UTF-8エンコーディングの具体的なテストデータは推測に基づく

## 2) 参照した情報（Evidence一覧）
> ここに「実在するもの」だけ列挙。抽出フェーズで付けたIDをそのまま出す。

- E-01: `src/funs.cpp` - dplyr_cumall, dplyr_cumany, dplyr_cummean関数の実装
- E-02: `src/filter.cpp` - dplyr_mask_eval_all_filter関数およびヘルパー関数の実装
- E-03: `src/mutate.cpp` - dplyr_mask_eval_all_mutate関数およびエラー処理の実装
- E-04: `src/summarise.cpp` - dplyr_mask_eval_all_summarise, dplyr_summarise_check_all_size_one, dplyr_reframe_recycle_horizontally_in_place, dplyr_extract_chunks関数の実装
- E-05: `src/group_by.cpp` - dplyr_expand_groups, dplyr_validate_grouped_df, dplyr_validate_rowwise_df関数およびExpanderクラス群の実装
- E-06: `src/group_data.cpp` - dplyr_group_indices, dplyr_group_keys関数の実装
- E-07: `src/chop.cpp` - dplyr_lazy_vec_chop, dplyr_make_mask_bindings, add_mask_binding, env_resolved関数の実装
- E-08: `src/mask.cpp` - dplyr_mask_binding_add, dplyr_mask_binding_remove, find_first, integers_append関数の実装
- E-09: `src/reconstruct.cpp` - ffi_dplyr_reconstruct, ffi_test_dplyr_attributes, ffi_test_dplyr_set_attributes関数の実装
- E-10: `src/slice.cpp` - dplyr_mask_eval_all関数の実装
- E-11: `src/init.cpp` - dplyr_init_library関数、シンボル・ベクタ・関数の初期化、R_init_dplyr関数の実装
- E-12: `src/imports.cpp` - rlang名前空間（eval_tidy, as_data_pronoun, new_data_mask, str_as_symbol, env_unbind）およびvctrs名前空間（obj_is_vector, short_vec_size, short_vec_recycle）のラッパー実装
- E-13: `src/dplyr.h` - マクロ定義（DPLYR_MASK_INIT等）、名前空間定義、関数プロトタイプ
- E-14: `src/utils.h` - string_is_ascii_or_utf8, string_as_utf8関数の実装

## 3) Claims と根拠の対応（レビューの主戦場）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-01 | dplyr_cumallは全TRUEで正しく累積結果を返す | E-01 | ○ |
| C-02 | dplyr_cumallはFALSE後は全てFALSEになる | E-01 | ○ |
| C-03 | dplyr_cumallはNA処理が正しく行われる | E-01 | ○ |
| C-04 | dplyr_cumallは空ベクトルで長さ0を返す | E-01 | ○ |
| C-05 | dplyr_cumallは長さ1のベクトルを正しく処理する | E-01 | ○ |
| C-06 | dplyr_cumallは先頭FALSEで全てFALSEになる | E-01 | ○ |
| C-07 | dplyr_cumanyは全FALSEで正しく累積結果を返す | E-01 | ○ |
| C-08 | dplyr_cumanyはTRUE後は全てTRUEになる | E-01 | ○ |
| C-09 | dplyr_cumanyはNA処理が正しく行われる | E-01 | ○ |
| C-10 | dplyr_cumanyは空ベクトルで長さ0を返す | E-01 | ○ |
| C-11 | dplyr_cumanyは長さ1のベクトルを正しく処理する | E-01 | ○ |
| C-12 | dplyr_cummeanは正の数値列で正しく累積平均を計算する | E-01 | ○ |
| C-13 | dplyr_cummeanは負の数値を含む場合も正しく計算する | E-01 | ○ |
| C-14 | dplyr_cummeanは空ベクトルで長さ0を返す | E-01 | ○ |
| C-15 | dplyr_cummeanは長さ1のベクトルを正しく処理する | E-01 | ○ |
| C-16 | dplyr_cummeanはNAを含む場合の挙動 | **根拠不十分** | △ |
| C-17 | dplyr_mask_eval_all_filterは論理ベクトルでフィルタリングが動作する | E-02 | ○ |
| C-18 | dplyr_mask_eval_all_filterはinvert=TRUEで結果を反転する | E-02 | ○ |
| C-19 | dplyr_mask_eval_all_filterは複数条件でAND結合される | E-02 | ○ |
| C-20 | dplyr_mask_eval_all_filterは非論理型でエラーをスローする | E-02 | ○ |
| C-21 | dplyr_mask_eval_all_filterはサイズ不一致でエラーをスローする | E-02 | ○ |
| C-22 | filter_is_valid_lglは論理ベクトルを有効と判定する | E-02 | ○ |
| C-23 | filter_is_valid_lglは1次元配列を有効と判定する | E-02 | ○ |
| C-24 | filter_is_valid_lglは1列行列を警告付きで有効と判定する | E-02 | ○ |
| C-25 | filter_is_valid_lglは2列以上の行列を無効と判定する | E-02 | ○ |
| C-26 | filter_lgl_reduceは論理ベクトルのAND結合を行う | E-02 | ○ |
| C-27 | filter_lgl_reduceは長さ1のベクトルでブロードキャストする | E-02 | ○ |
| C-28 | dplyr_mask_eval_all_mutateはベクトル結果をチャンクに格納する | E-03 | ○ |
| C-29 | dplyr_mask_eval_all_mutateは長さ1の結果をリサイクルする | E-03 | ○ |
| C-30 | dplyr_mask_eval_all_mutateは全NULLでR_NilValueを返す | E-03 | ○ |
| C-31 | dplyr_mask_eval_all_mutateはベクトルとNULL混在でエラーをスローする | E-03 | ○ |
| C-32 | dplyr_mask_eval_all_mutateは不正なサイズでエラーをスローする | E-03 | ○ |
| C-33 | dplyr_mask_eval_all_mutateは非ベクトル型でエラーをスローする | E-03 | ○ |
| C-34 | dplyr_mask_eval_all_summariseは集計結果をチャンクに格納する | E-04 | ○ |
| C-35 | dplyr_mask_eval_all_summariseは全NULLでR_NilValueを返す | E-04 | ○ |
| C-36 | dplyr_mask_eval_all_summariseはベクトルとNULL混在でエラーをスローする | E-04 | ○ |
| C-37 | dplyr_mask_eval_all_summariseは非ベクトル型でエラーをスローする | E-04 | ○ |
| C-38 | dplyr_summarise_check_all_size_oneは全サイズ1で成功する | E-04 | ○ |
| C-39 | dplyr_summarise_check_all_size_oneはサイズ1以外でエラーをスローする | E-04 | ○ |
| C-40 | dplyr_reframe_recycle_horizontally_in_placeは共通サイズにリサイクルする | E-04 | ○ |
| C-41 | dplyr_reframe_recycle_horizontally_in_placeは非互換サイズでエラーをスローする | E-04 | ○ |
| C-42 | dplyr_extract_chunksは列ごとのチャンクを抽出する | E-04 | ○ |
| C-43 | dplyr_extract_chunksは空リストを正しく処理する | E-04 | ○ |
| C-44 | dplyr_expand_groupsはグループを正しく展開する | E-05 | ○ |
| C-45 | dplyr_validate_grouped_dfは有効なgrouped_dfで成功する | E-05 | ○ |
| C-46 | dplyr_validate_grouped_dfはクラスエラーを返す | E-05 | ○ |
| C-47 | dplyr_validate_grouped_dfはgroups属性エラーを返す | E-05 | ○ |
| C-48 | dplyr_validate_grouped_dfは列名エラーを返す | E-05 | ○ |
| C-49 | dplyr_validate_grouped_dfは列型エラーを返す | E-05 | ○ |
| C-50 | dplyr_validate_grouped_dfは境界外インデックスエラーを返す | E-05 | ○ |
| C-51 | dplyr_validate_rowwise_dfは有効なrowwise_dfで成功する | E-05 | ○ |
| C-52 | dplyr_validate_rowwise_dfはクラスエラーを返す | E-05 | ○ |
| C-53 | dplyr_validate_rowwise_dfはサイズエラーを返す | E-05 | ○ |
| C-54 | dplyr_group_indicesはグループインデックスを正しく計算する | E-06 | ○ |
| C-55 | dplyr_group_indicesは空データで空ベクトルを返す | E-06 | ○ |
| C-56 | dplyr_group_keysはグループキーを正しく抽出する | E-06 | ○ |
| C-57 | dplyr_group_keysは属性を正しくコピーする | E-06 | ○ |
| C-58 | dplyr_lazy_vec_chopはグループ化データを遅延チョップする | E-07 | ○ |
| C-59 | dplyr_lazy_vec_chopは行単位データを遅延チョップする | E-07 | ○ |
| C-60 | dplyr_lazy_vec_chopは非グループ化データを遅延チョップする | E-07 | ○ |
| C-61 | dplyr_make_mask_bindingsはマスクバインディング環境を作成する | E-07 | ○ |
| C-62 | add_mask_bindingはアクティブバインディングを追加する | E-07 | ○ |
| C-63 | env_resolvedはプロミスの解決状態を判定する | E-07 | ○ |
| C-64 | env_resolvedは未解決プロミスをFALSEと判定する | E-07 | ○ |
| C-65 | dplyr_mask_binding_addは新規列を追加する | E-08 | ○ |
| C-66 | dplyr_mask_binding_addは既存列を更新する | E-08 | ○ |
| C-67 | dplyr_mask_binding_removeは列を削除する | E-08 | ○ |
| C-68 | dplyr_mask_binding_removeは存在しない列の削除を無視する | E-08 | ○ |
| C-69 | find_firstは文字列が見つかった場合にインデックスを返す | E-08 | ○ |
| C-70 | find_firstは文字列が見つからない場合に配列長を返す | E-08 | ○ |
| C-71 | find_firstはUTF-8エンコーディングの文字列を検索する | **具体的なテストデータは推測** | △ |
| C-72 | integers_appendは整数ベクトルに要素を追加する | E-08 | ○ |
| C-73 | ffi_dplyr_reconstructはデータフレームの属性を再構築する | E-09 | ○ |
| C-74 | ffi_dplyr_reconstructはnames属性をdataのものを保持する | E-09 | ○ |
| C-75 | ffi_dplyr_reconstructはrow.names属性をdataのものを保持する | E-09 | ○ |
| C-76 | ffi_dplyr_reconstructはdataがリストでない場合にエラーをスローする | E-09 | ○ |
| C-77 | ffi_dplyr_reconstructはtemplateがリストでない場合にエラーをスローする | E-09 | ○ |
| C-78 | ffi_dplyr_reconstructはdataがオブジェクトでない場合にエラーをスローする | E-09 | ○ |
| C-79 | ffi_dplyr_reconstructはdataにnames属性がない場合にエラーをスローする | E-09 | ○ |
| C-80 | ffi_dplyr_reconstructはdataにrow.names属性がない場合にエラーをスローする | E-09 | ○ |
| C-81 | dplyr_mask_eval_allは式の評価結果をチャンクに格納する | E-10 | ○ |
| C-82 | dplyr_mask_eval_allはグループ数0で空リストを返す | E-10 | ○ |
| C-83 | dplyr_init_libraryはライブラリを正しく初期化する | E-11 | ○ |
| C-84 | rlang::eval_tidyはtidyeval式を正しく評価する | E-12 | ○ |
| C-85 | rlang::as_data_pronounはデータプロナウンを作成する | E-12 | ○ |
| C-86 | rlang::new_data_maskはデータマスクを作成する | E-12 | ○ |
| C-87 | rlang::str_as_symbolは文字列をシンボルに変換する | E-12 | ○ |
| C-88 | rlang::env_unbindは環境からバインディングを削除する | E-12 | ○ |
| C-89 | vctrs::obj_is_vectorはベクトルをTRUEと判定する | E-12 | ○ |
| C-90 | vctrs::obj_is_vectorは非ベクトルをFALSEと判定する | E-12 | ○ |
| C-91 | vctrs::short_vec_sizeはベクトルのサイズを返す | E-12 | ○ |
| C-92 | vctrs::short_vec_recycleはベクトルをリサイクルする | E-12 | ○ |
| C-93 | string_is_ascii_or_utf8はASCII文字列をTRUEと判定する | E-14 | ○ |
| C-94 | string_is_ascii_or_utf8はUTF-8文字列をTRUEと判定する | E-14 | ○ |
| C-95 | string_is_ascii_or_utf8はNA_STRINGをTRUEと判定する | E-14 | ○ |
| C-96 | string_as_utf8は文字列をUTF-8に変換する | E-14 | ○ |
| C-97 | vctrs::obj_is_listはリストをTRUEと判定する | E-13 | ○ |
| C-98 | vctrs::obj_is_listは非リストをFALSEと判定する | E-13 | ○ |
| C-99 | ExpanderCollecter::collect_leafはリーフノードを収集する | E-05 | ○ |
| C-100 | ExpanderCollecter::collect_nodeはノードを収集する | E-05 | ○ |

## 4) 不足情報（Unknown / Missing）
- **C-16（dplyr_cummeanのNA処理）**：`dplyr_cummean`関数のC++実装では、NAの明示的な処理がない。NAが入力された場合の挙動はRのREALSXP型の標準的なNA伝播に依存するが、具体的な動作はテストで確認が必要。
  - 候補：R側のテストコード / Rのdoubleとしてのnanの挙動ドキュメント
- **C-71（UTF-8エンコーディングテスト）**：`find_first`関数でUTF-8エンコーディングの文字列検索をテストするための具体的なテストデータは、実装からの推測に基づく。
  - 候補：実際のRからの呼び出しパターン / Rのエンコーディング仕様

## 5) リスクフラグ（レビュー観点）
- 0（低リスク）：rlang/vctrs API呼び出し部分 - 外部パッケージの安定したAPIを利用
- 1（中リスク）：エンコーディング処理 - R 4.5.0以降でのAPI変更への対応が含まれる
- 1（中リスク）：ALTREP row.names対応 - R 4.6.0以降での制限事項がある
- 0（低リスク）：累積関数（cumall/cumany/cummean） - シンプルなアルゴリズムで検証しやすい
- 1（中リスク）：グループ展開（Expander系クラス） - 再帰的なデータ構造で複雑

## 6) レビュアーチェックリスト（最小）
- [ ] dplyr_cummeanのNA入力時の挙動を実際のRテストで確認
- [ ] UTF-8以外のエンコーディング（Latin-1等）を含む文字列でのfind_first動作確認
- [ ] R 4.5.0未満と4.5.0以上でのstring_is_ascii_or_utf8の動作の一貫性確認
- [ ] ffi_dplyr_reconstructのALTREP row.names非実体化が期待通りか確認
- [ ] Expanderクラス群のメモリリーク（deleteの呼び出し）の確認
- [ ] 境界値テスト（空ベクトル、長さ1）の網羅性確認
- [ ] エラーメッセージの国際化対応状況の確認（ハードコードされた英語メッセージ）
