@@ -177,6 +177,79 @@ public function make静的メソッドで様々なイテラブルからコレク
177
177
$ this ->assertEquals (['p ' => 100 , 'q ' => 200 ], $ collection3 ->toArray ());
178
178
}
179
179
180
+ /**
181
+ * @param Pair<mixed,mixed>[] $pairs
182
+ */
183
+ #[Test]
184
+ #[DataProvider('様々な要素を持つPairの配列を提供 ' )]
185
+ public function tryFrom静的メソッドで有効なPair配列から成功結果が取得できる (array $ pairs ): void
186
+ {
187
+ $ result = Map::tryFrom (...$ pairs );
188
+
189
+ $ this ->assertTrue ($ result ->isOk ());
190
+ $ collection = $ result ->unwrap ();
191
+ $ this ->assertInstanceOf (Map::class, $ collection );
192
+
193
+ // toArray()で得られる配列は、キーと値のマッピングになっている
194
+ $ expected = [];
195
+ foreach ($ pairs as $ pair ) {
196
+ $ expected [$ pair ->key ] = $ pair ->value ;
197
+ }
198
+
199
+ $ this ->assertEquals ($ expected , $ collection ->toArray ());
200
+ }
201
+
202
+ /**
203
+ * @param Pair<mixed,mixed>[] $pairs
204
+ */
205
+ #[Test]
206
+ #[DataProvider('独自クラスを含むPairの配列を提供 ' )]
207
+ public function tryFrom静的メソッドで独自クラスを含むPair配列から成功結果が取得できる (array $ pairs ): void
208
+ {
209
+ $ result = Map::tryFrom (...$ pairs );
210
+
211
+ $ this ->assertTrue ($ result ->isOk ());
212
+ $ collection = $ result ->unwrap ();
213
+ $ this ->assertInstanceOf (Map::class, $ collection );
214
+
215
+ // キーが独自クラスの場合でもtoArray()で正しくマッピングされる
216
+ $ expected = [];
217
+ foreach ($ pairs as $ pair ) {
218
+ $ key = match (true ) {
219
+ is_int ($ pair ->key ) => $ pair ->key ,
220
+ is_string ($ pair ->key ) => $ pair ->key ,
221
+ $ pair ->key instanceof Stringable => (string )$ pair ->key ,
222
+ default => throw new BadMethodCallException ('The key must be an integer or string or Stringable. ' ),
223
+ };
224
+ $ expected [$ key ] = $ pair ->value ;
225
+ }
226
+
227
+ $ this ->assertEquals ($ expected , $ collection ->toArray ());
228
+ }
229
+
230
+ #[Test]
231
+ public function tryFrom静的メソッドで無効なPair配列からエラー結果が取得できる (): void
232
+ {
233
+ // Mapの実装では現在、最小カウントは0、最大カウントはPHP_INT_MAXなので
234
+ // 常に有効な結果になるはずだが、将来的な制約変更に備えてテストを追加
235
+
236
+ // 今後最小カウント制約が追加された場合のテスト
237
+ // この例では現在は常に成功するが、将来的に最小カウントが増えた場合を想定
238
+ $ result = Map::tryFrom ();
239
+
240
+ // 最大カウント制約のテスト用の大きなPair配列を用意する
241
+ // 注: PHP_INT_MAXの配列は作れないので、実用的なテスト範囲で十分
242
+ $ bigArray = [];
243
+ for ($ i = 0 ; $ i < 1000 ; ++$ i ) {
244
+ $ bigArray [] = Pair::of ("key {$ i }" , "value {$ i }" );
245
+ }
246
+ $ resultBig = Map::tryFrom (...$ bigArray );
247
+
248
+ // 現在の実装では両方成功するはず
249
+ $ this ->assertTrue ($ result ->isOk ());
250
+ $ this ->assertTrue ($ resultBig ->isOk ());
251
+ }
252
+
180
253
#[Test]
181
254
public function put関数でキーと値を追加したコレクションが取得できる (): void
182
255
{
0 commit comments