diff --git a/bin/auto-sync.txt b/bin/auto-sync.txt index dbf3f3b33..3a9c15400 100644 --- a/bin/auto-sync.txt +++ b/bin/auto-sync.txt @@ -90,6 +90,7 @@ square-root state-of-tic-tac-toe strain sublist +sum-of-multiples swift-scheduling transpose tournament diff --git a/exercises/practice/sum-of-multiples/.meta/config.json b/exercises/practice/sum-of-multiples/.meta/config.json index 24456e396..5d37da645 100644 --- a/exercises/practice/sum-of-multiples/.meta/config.json +++ b/exercises/practice/sum-of-multiples/.meta/config.json @@ -5,7 +5,8 @@ "contributors": [ "arueckauer", "kytrinyx", - "neenjaw" + "neenjaw", + "resu-xuniL" ], "files": { "solution": [ diff --git a/exercises/practice/sum-of-multiples/.meta/example.php b/exercises/practice/sum-of-multiples/.meta/example.php index fbf0f0b06..c796d15b6 100644 --- a/exercises/practice/sum-of-multiples/.meta/example.php +++ b/exercises/practice/sum-of-multiples/.meta/example.php @@ -1,27 +1,5 @@ . - * - * To disable strict typing, comment out the directive below. - */ - declare(strict_types=1); function sumOfMultiples($number, $multiples) diff --git a/exercises/practice/sum-of-multiples/.meta/tests.toml b/exercises/practice/sum-of-multiples/.meta/tests.toml index 365c12fdf..1e9b1241d 100644 --- a/exercises/practice/sum-of-multiples/.meta/tests.toml +++ b/exercises/practice/sum-of-multiples/.meta/tests.toml @@ -1,6 +1,13 @@ -# This is an auto-generated file. Regular comments will be removed when this -# file is regenerated. Regenerating will not touch any manually added keys, -# so comments can be added in a "comment" key. +# This is an auto-generated file. +# +# Regenerating this file via `configlet sync` will: +# - Recreate every `description` key/value pair +# - Recreate every `reimplements` key/value pair, where they exist in problem-specifications +# - Remove any `include = true` key/value pair (an omitted `include` key implies inclusion) +# - Preserve any other key/value pair +# +# As user-added comments (using the # character) will be removed when this file +# is regenerated, comments can be added via a `comment` key. [54aaab5a-ce86-4edc-8b40-d3ab2400a279] description = "no multiples within limit" diff --git a/exercises/practice/sum-of-multiples/SumOfMultiplesTest.php b/exercises/practice/sum-of-multiples/SumOfMultiplesTest.php index c8fd66dd2..b9d235d1c 100644 --- a/exercises/practice/sum-of-multiples/SumOfMultiplesTest.php +++ b/exercises/practice/sum-of-multiples/SumOfMultiplesTest.php @@ -1,29 +1,8 @@ . - * - * To disable strict typing, comment out the directive below. - */ - declare(strict_types=1); +use PHPUnit\Framework\Attributes\TestDox; use PHPUnit\Framework\TestCase; class SumOfMultiplesTest extends TestCase @@ -33,63 +12,147 @@ public static function setUpBeforeClass(): void require_once 'SumOfMultiples.php'; } - public function testSumToOne(): void + /** + * uuid: 54aaab5a-ce86-4edc-8b40-d3ab2400a279 + */ + #[TestDox('No multiples within limit')] + public function testNoMultiplesWithinLimit(): void { $this->assertEquals(0, sumOfMultiples(1, [3, 5])); } - public function testSumToThree(): void + /** + * uuid: 361e4e50-c89b-4f60-95ef-5bc5c595490a + */ + #[TestDox('One factor has multiples within limit')] + public function testOneFactorHasMultiplesWithinLimit(): void { $this->assertEquals(3, sumOfMultiples(4, [3, 5])); } - public function testSumToTen(): void + /** + * uuid: e644e070-040e-4ae0-9910-93c69fc3f7ce + */ + #[TestDox('More than one multiple within limit')] + public function testMoreThanOneMultipleWithinLimit(): void { - $this->assertEquals(23, sumOfMultiples(10, [3, 5])); + $this->assertEquals(9, sumOfMultiples(7, [3])); } - public function testSumToTwenty(): void + /** + * uuid: 607d6eb9-535c-41ce-91b5-3a61da3fa57f + */ + #[TestDox('More than one factor with multiples within limit')] + public function testMoreThanOneFactorWithMultiplesWithinLimit(): void { - $this->assertEquals(78, sumOfMultiples(20, [3, 5])); + $this->assertEquals(23, sumOfMultiples(10, [3, 5])); } - public function testSumToHundred(): void + /** + * uuid: f47e8209-c0c5-4786-b07b-dc273bf86b9b + */ + #[TestDox('Each multiple is only counted once')] + public function testEachMultipleIsOnlyCountedOnce(): void { $this->assertEquals(2318, sumOfMultiples(100, [3, 5])); } - public function testSumToThousand(): void + /** + * uuid: 28c4b267-c980-4054-93e9-07723db615ac + */ + #[TestDox('A much larger limit')] + public function testAMuchLargerLimit(): void { $this->assertEquals(233168, sumOfMultiples(1000, [3, 5])); } - public function testConfigureToTwenty(): void + /** + * uuid: 09c4494d-ff2d-4e0f-8421-f5532821ee12 + */ + #[TestDox('Three factors')] + public function testThreeFactors(): void { $this->assertEquals(51, sumOfMultiples(20, [7, 13, 17])); } - public function testConfigureToFifteen(): void + /** + * uuid: 2d0d5faa-f177-4ad6-bde9-ebb865083751 + */ + #[TestDox('Factors not relatively prime')] + public function testFactorsNotRelativelyPrime(): void { $this->assertEquals(30, sumOfMultiples(15, [4, 6])); } - public function testConfigureToOneFifty(): void + /** + * uuid: ece8f2e8-96aa-4166-bbb7-6ce71261e354 + */ + #[TestDox('Some pairs of factors relatively prime and some not')] + public function testSomePairsOfFactorsRelativelyPrimeAndSomeNot(): void { $this->assertEquals(4419, sumOfMultiples(150, [5, 6, 8])); } - public function testConfigureToFortySeven(): void + /** + * uuid: 624fdade-6ffb-400e-8472-456a38c171c0 + */ + #[TestDox('One factor is a multiple of another')] + public function testOneFactorIsAMultipleOfAnother(): void + { + $this->assertEquals(275, sumOfMultiples(51, [5, 25])); + } + + /** + * uuid: 949ee7eb-db51-479c-b5cb-4a22b40ac057 + */ + #[TestDox('Much larger factors')] + public function testMuchLargerFactors(): void { $this->assertEquals(2203160, sumOfMultiples(10000, [43, 47])); } - public function testMultiplesOfOneToHundred(): void + /** + * uuid: 41093673-acbd-482c-ab80-d00a0cbedecd + */ + #[TestDox('All numbers are multiples of 1')] + public function testAllNumbersAreMultiplesOf1(): void { $this->assertEquals(4950, sumOfMultiples(100, [1])); } - public function testMultiplesOfEmptyList(): void + /** + * uuid: 1730453b-baaa-438e-a9c2-d754497b2a76 + */ + #[TestDox('No factors means an empty sum')] + public function testNoFactorsMeansAnEmptySum(): void + { + $this->assertEquals(0, sumOfMultiples(10000, [])); + } + + /** + * uuid: 214a01e9-f4bf-45bb-80f1-1dce9fbb0310 + */ + #[TestDox('The only multiple of 0 is 0')] + public function testTheOnlyMultipleOf0Is0(): void + { + $this->assertEquals(0, sumOfMultiples(1, [0])); + } + + /** + * uuid: c423ae21-a0cb-4ec7-aeb1-32971af5b510 + */ + #[TestDox('The factor 0 does not affect the sum of multiples of other factors')] + public function testTheFactor0DoesNotAffectTheSumOfMultiplesOfOtherFactors(): void + { + $this->assertEquals(3, sumOfMultiples(4, [3, 0])); + } + + /** + * uuid: 17053ba9-112f-4ac0-aadb-0519dd836342 + */ + #[TestDox('Solutions using include-exclude must extend to cardinality greater than 3')] + public function testSolutionsUsingIncludeExcludeMustExtendToCardinalityGreaterThan3(): void { - $this->assertEquals(0, sumOfMultiples(1000, [0])); + $this->assertEquals(39614537, sumOfMultiples(10000, [2, 3, 5, 7, 11])); } }