@@ -374,6 +374,46 @@ public function testTen() : void
374374 self ::assertSame (BigInteger::ten (), BigInteger::ten ());
375375 }
376376
377+ /**
378+ * @param string[] $values
379+ *
380+ * @dataProvider providerGcdMultiple
381+ */
382+ public function testGcdMultiple (array $ values , string $ expectedGCD ): void
383+ {
384+ $ values = array_map (fn (string $ value ) => BigInteger::of ($ value ), $ values );
385+ $ actualGCD = BigInteger::gcdMultiple (...$ values );
386+
387+ self ::assertSame ($ expectedGCD , (string ) $ actualGCD );
388+ }
389+
390+ public function providerGcdMultiple (): Generator
391+ {
392+ // 1 value
393+ foreach (['-2 ' , '-1 ' , '0 ' , '1 ' , '2 ' ] as $ value ) {
394+ yield [[$ value ], $ value ];
395+ }
396+
397+ // 2 values
398+ foreach ($ this ->providerGcd () as [$ a , $ b , $ gcd ]) {
399+ yield [[$ a , $ b ], $ gcd ];
400+ }
401+
402+ // n values
403+ yield [['2 ' , '4 ' , '7 ' ], '1 ' ];
404+ yield [['2 ' , '4 ' , '8 ' ], '2 ' ];
405+ yield [['2 ' , '4 ' , '-7 ' ], '1 ' ];
406+ yield [['2 ' , '4 ' , '-8 ' ], '2 ' ];
407+ yield [['28 ' , '56 ' , '77777 ' ], '7 ' ];
408+ yield [['28 ' , '56 ' , '77778 ' ], '2 ' ];
409+ yield [['28 ' , '56 ' , '77782 ' ], '2 ' ];
410+ yield [['28 ' , '56 ' , '77783 ' ], '1 ' ];
411+ yield [['28 ' , '56 ' , '77784 ' ], '28 ' ];
412+ yield [['28 ' , '56 ' , '77784 ' , '4 ' ], '4 ' ];
413+ yield [['28 ' , '56 ' , '77784 ' , '14 ' ], '14 ' ];
414+ yield [['28 ' , '56 ' , '77784 ' , '14 ' , '4 ' ], '2 ' ];
415+ }
416+
377417 /**
378418 * @dataProvider providerMin
379419 *
0 commit comments