Skip to content

Commit

Permalink
Add a finder method (#50)
Browse files Browse the repository at this point in the history
This allows to get information about the finder that returned the count. This should help tremendously with testing.
  • Loading branch information
theofidry authored Dec 7, 2022
1 parent 89a5259 commit 6184d0e
Show file tree
Hide file tree
Showing 2 changed files with 87 additions and 27 deletions.
18 changes: 18 additions & 0 deletions src/CpuCoreCounter.php
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,24 @@ private function findCount(): int
throw NumberOfCpuCoreNotFound::create();
}

/**
* @throws NumberOfCpuCoreNotFound
*
* @return array{CpuCoreFinder, positive-int}
*/
public function getFinderAndCores(): array
{
foreach ($this->finders as $finder) {
$cores = $finder->find();

if (null !== $cores) {
return [$finder, $cores];
}
}

throw NumberOfCpuCoreNotFound::create();
}

/**
* @return list<CpuCoreFinder>
*/
Expand Down
96 changes: 69 additions & 27 deletions tests/CpuCoreCounterTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@
use Fidry\CpuCoreCounter\Test\Finder\DummyCpuCoreFinder;
use PHPUnit\Framework\TestCase;
use function get_class;
use function is_int;
use function is_array;

/**
* @covers \Fidry\CpuCoreCounter\CpuCoreCounter
Expand All @@ -40,15 +40,16 @@ public function test_it_can_get_the_number_of_cpu_cores(): void
* @dataProvider cpuCoreFinderProvider
*
* @param list<CpuCoreFinder> $finders
* @param int|Exception $expected
* @param array{CpuCoreFinder, positive-int}|Exception $expected
*/
public function test_it_can_get_the_number_of_cpu_cores_based_on_the_registered_finders(
array $finders,
$expected
): void {
$counter = new CpuCoreCounter($finders);

if (is_int($expected)) {
if (is_array($expected)) {
$expected = $expected[1];
$actual = $counter->getCount();

self::assertSame($expected, $actual);
Expand All @@ -65,6 +66,37 @@ public function test_it_can_get_the_number_of_cpu_cores_based_on_the_registered_
$counter->getCount();
}

/**
* @dataProvider cpuCoreFinderProvider
*
* @param list<CpuCoreFinder> $finders
* @param array{CpuCoreFinder, positive-int}|Exception $expected
*/
public function test_it_can_get_the_finder_and_number_of_cpu_cores_based_on_the_registered_finders(
array $finders,
$expected
): void {
$counter = new CpuCoreCounter($finders);

if (is_array($expected)) {
[$expectedCores, $expectedFinder] = $expected;
[$actualCores, $actualFinder] = $counter->getFinderAndCores();

self::assertSame($expectedFinder, $actualFinder);
self::assertSame($expectedCores, $actualCores);

return;
}

// Sanity check
self::assertInstanceOf(Exception::class, $expected);

$this->expectException(get_class($expected));
$this->expectExceptionMessage($expected->getMessage());

$counter->getCount();
}

public static function cpuCoreFinderProvider(): iterable
{
$defaultException = NumberOfCpuCoreNotFound::create();
Expand All @@ -74,12 +106,14 @@ public static function cpuCoreFinderProvider(): iterable
$defaultException,
];

yield 'single finder finds a value' => [
[
new DummyCpuCoreFinder(3),
],
3,
];
yield 'single finder finds a value' => (static function () {
$finder = new DummyCpuCoreFinder(3);

return [
[$finder],
[$finder, 3],
];
})();

yield 'single finder does not find a value' => [
[
Expand All @@ -88,23 +122,31 @@ public static function cpuCoreFinderProvider(): iterable
$defaultException,
];

yield 'multiple finders find a value' => [
[
new DummyCpuCoreFinder(3),
new DummyCpuCoreFinder(7),
new DummyCpuCoreFinder(11),
],
3,
];

yield 'multiple finders find a value with some not finding any' => [
[
new DummyCpuCoreFinder(null),
new DummyCpuCoreFinder(7),
new DummyCpuCoreFinder(null),
new DummyCpuCoreFinder(11),
],
7,
];
yield 'multiple finders find a value' => (static function () {
$finder = new DummyCpuCoreFinder(3);

return [
[
$finder,
new DummyCpuCoreFinder(7),
new DummyCpuCoreFinder(11),
],
[$finder, 3],
];
})();

yield 'multiple finders find a value with some not finding any' => (static function () {
$finder = new DummyCpuCoreFinder(7);

return [
[
new DummyCpuCoreFinder(null),
$finder,
new DummyCpuCoreFinder(null),
new DummyCpuCoreFinder(11),
],
[$finder, 7],
];
})();
}
}

0 comments on commit 6184d0e

Please sign in to comment.