Skip to content

Commit be6354d

Browse files
committed
feat: Add tests for ArrayList and Map classes to validate tryFrom static method behavior
1 parent 78c5f6e commit be6354d

File tree

2 files changed

+108
-0
lines changed

2 files changed

+108
-0
lines changed

tests/Unit/Collection/ArrayListTest.php

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -122,6 +122,41 @@ public function make静的メソッドで様々なイテラブルからコレク
122122
$this->assertEquals(['a', 'b', 'c'], $collection3->toArray());
123123
}
124124

125+
/**
126+
* @param array<int,mixed> $elements
127+
*/
128+
#[Test]
129+
#[DataProvider('様々な要素のコレクションを提供')]
130+
public function tryFrom静的メソッドで有効な配列から成功結果が取得できる(array $elements): void
131+
{
132+
$result = ArrayList::tryFrom($elements);
133+
134+
$this->assertTrue($result->isOk());
135+
$collection = $result->unwrap();
136+
$this->assertInstanceOf(ArrayList::class, $collection);
137+
$this->assertEquals($elements, $collection->toArray());
138+
}
139+
140+
#[Test]
141+
public function tryFrom静的メソッドで無効な配列からエラー結果が取得できる(): void
142+
{
143+
// ArrayListの実装では現在、最小カウントは0、最大カウントはPHP_INT_MAXなので
144+
// 常に有効な結果になるはずだが、将来的な制約変更に備えてテストを追加
145+
146+
// 今後最小カウント制約が追加された場合のテスト
147+
// この例では現在は常に成功するが、将来的に最小カウントが増えた場合を想定
148+
$result = ArrayList::tryFrom([]);
149+
150+
// 最大カウント制約のテスト用の大きな配列を用意する
151+
// 注: PHP_INT_MAXの配列は作れないので、実用的なテスト範囲で十分
152+
$bigArray = array_fill(0, 1000, 'test');
153+
$resultBig = ArrayList::tryFrom($bigArray);
154+
155+
// 現在の実装では両方成功するはず
156+
$this->assertTrue($result->isOk());
157+
$this->assertTrue($resultBig->isOk());
158+
}
159+
125160
#[Test]
126161
public function first関数で先頭要素が取得できる(): void
127162
{

tests/Unit/Collection/MapTest.php

Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -177,6 +177,79 @@ public function make静的メソッドで様々なイテラブルからコレク
177177
$this->assertEquals(['p' => 100, 'q' => 200], $collection3->toArray());
178178
}
179179

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+
180253
#[Test]
181254
public function put関数でキーと値を追加したコレクションが取得できる(): void
182255
{

0 commit comments

Comments
 (0)