Array offset accessors out-of-bounds test added
この変更は、Array の位置指定アクセサ(second 〜 forty_two、second_to_last、third_to_last)が配列長を超えた場合に nil を返すことを保証するテストを追加し、未カバーだった境界ケースを検証します。
背景
Array#second から #forty_two、#second_to_last、#third_to_last は、対象位置が配列の範囲外であれば nil を返す仕様です。しかし従来のテスト test_specific_accessor は 42 要素の配列だけを使用しており、実際に nil が返るパスは実行されていませんでした。結果として、将来的な実装変更で境界処理が意図せず変わった場合に回帰を検知できないリスクが残っていました。
技術的な変更
activesupport/test/core_ext/array/access_test.rb に test_specific_accessor_out_of_bounds という新しいテストメソッドが追加されました。このメソッドは空配列や要素数が不足している配列に対し、すべてのアクセサが nil を返すことを assert_nil で確認します。
def test_specific_accessor_out_of_bounds
assert_nil [].second
assert_nil [].third
assert_nil [].fourth
assert_nil [].fifth
assert_nil [].forty_two
assert_nil %w( a b ).third_to_last
assert_nil %w( a ).second_to_last
end
この追加はテストコードのみであり、プロダクションコードやライブラリ本体の振る舞いには一切変更を加えていません。したがって実行時の挙動やパフォーマンスへの影響はありませんが、テストスイートのカバレッジが向上し、境界条件に関する回帰検出が可能になります。
設計判断
テストだけで仕様を明示的に検証する方針は、境界条件の安全性 を保証する上で重要です。実装が将来的に nil ではなく例外を投げたり、デフォルト値を返すように変更された場合でも、このテストが失敗することで即座に問題を把握できます。設計上のトレードオフはなく、既存のテストフレームワークと一貫した形で追加された点が評価できます。
まとめ
本 PR は Array の位置指定アクセサが範囲外アクセス時に nil を返すことを検証するテストを追加し、未テストだったエッジケースをカバーしました。コード変更は行わずテストのみであるため安全性を保ちつつ、将来的な回帰リスクを低減する効果があります。