Skip to content

Commit ff626c2

Browse files
committed
Add more nthRoot tests
1 parent f1fa330 commit ff626c2

2 files changed

Lines changed: 107 additions & 0 deletions

File tree

tests/BigDecimalTest.php

Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2679,6 +2679,47 @@ public static function providerNthRoot(): Generator
26792679
['91', 3, 0, RoundingMode::Up, '5'],
26802680
['91', 3, 0, RoundingMode::HalfUp, '4'],
26812681

2682+
['0.999', 3, 0, RoundingMode::Unnecessary, 'NTH_ROOT_NOT_EXACT'],
2683+
['0.999', 3, 0, RoundingMode::Down, '0'],
2684+
['0.999', 3, 0, RoundingMode::Up, '1'],
2685+
['0.999', 3, 0, RoundingMode::HalfUp, '1'],
2686+
['0.999', 3, 1, RoundingMode::Unnecessary, 'NTH_ROOT_NOT_EXACT'],
2687+
['0.999', 3, 1, RoundingMode::Down, '0.9'],
2688+
['0.999', 3, 1, RoundingMode::Up, '1.0'],
2689+
['0.999', 3, 1, RoundingMode::HalfUp, '1.0'],
2690+
['0.999', 3, 2, RoundingMode::Unnecessary, 'NTH_ROOT_NOT_EXACT'],
2691+
['0.999', 3, 2, RoundingMode::Down, '0.99'],
2692+
['0.999', 3, 2, RoundingMode::Up, '1.00'],
2693+
['0.999', 3, 2, RoundingMode::HalfUp, '1.00'],
2694+
['0.999', 3, 3, RoundingMode::Unnecessary, 'NTH_ROOT_NOT_EXACT'],
2695+
['0.999', 3, 3, RoundingMode::Down, '0.999'],
2696+
['0.999', 3, 3, RoundingMode::Up, '1.000'],
2697+
['0.999', 3, 3, RoundingMode::HalfUp, '1.000'],
2698+
['0.999', 3, 4, RoundingMode::Unnecessary, 'NTH_ROOT_NOT_EXACT'],
2699+
['0.999', 3, 4, RoundingMode::Down, '0.9996'],
2700+
['0.999', 3, 4, RoundingMode::Up, '0.9997'],
2701+
['0.999', 3, 4, RoundingMode::HalfUp, '0.9997'],
2702+
['-0.999', 3, 0, RoundingMode::Unnecessary, 'NTH_ROOT_NOT_EXACT'],
2703+
['-0.999', 3, 0, RoundingMode::Down, '0'],
2704+
['-0.999', 3, 0, RoundingMode::Up, '-1'],
2705+
['-0.999', 3, 0, RoundingMode::HalfUp, '-1'],
2706+
['-0.999', 3, 1, RoundingMode::Unnecessary, 'NTH_ROOT_NOT_EXACT'],
2707+
['-0.999', 3, 1, RoundingMode::Down, '-0.9'],
2708+
['-0.999', 3, 1, RoundingMode::Up, '-1.0'],
2709+
['-0.999', 3, 1, RoundingMode::HalfUp, '-1.0'],
2710+
['-0.999', 3, 2, RoundingMode::Unnecessary, 'NTH_ROOT_NOT_EXACT'],
2711+
['-0.999', 3, 2, RoundingMode::Down, '-0.99'],
2712+
['-0.999', 3, 2, RoundingMode::Up, '-1.00'],
2713+
['-0.999', 3, 2, RoundingMode::HalfUp, '-1.00'],
2714+
['-0.999', 3, 3, RoundingMode::Unnecessary, 'NTH_ROOT_NOT_EXACT'],
2715+
['-0.999', 3, 3, RoundingMode::Down, '-0.999'],
2716+
['-0.999', 3, 3, RoundingMode::Up, '-1.000'],
2717+
['-0.999', 3, 3, RoundingMode::HalfUp, '-1.000'],
2718+
['-0.999', 3, 4, RoundingMode::Unnecessary, 'NTH_ROOT_NOT_EXACT'],
2719+
['-0.999', 3, 4, RoundingMode::Down, '-0.9996'],
2720+
['-0.999', 3, 4, RoundingMode::Up, '-0.9997'],
2721+
['-0.999', 3, 4, RoundingMode::HalfUp, '-0.9997'],
2722+
26822723
// n = 4
26832724

26842725
// Perfect 4th powers: 16 = 2^4, 0.0016 = 0.2^4.
@@ -2739,6 +2780,38 @@ public static function providerNthRoot(): Generator
27392780
['2', 100, 5, RoundingMode::Up, '1.00696'],
27402781
['2', 100, 5, RoundingMode::Down, '1.00695'],
27412782
['2', 100, 5, RoundingMode::HalfUp, '1.00696'],
2783+
2784+
// 2^100
2785+
['1267650600228229401496703205376', 100, 10, RoundingMode::Unnecessary, '2.0000000000'],
2786+
2787+
// 2^100 + 1
2788+
['1267650600228229401496703205377', 100, 10, RoundingMode::Unnecessary, 'NTH_ROOT_NOT_EXACT'],
2789+
['1267650600228229401496703205377', 100, 10, RoundingMode::Down, '2.0000000000'],
2790+
['1267650600228229401496703205377', 100, 10, RoundingMode::Up, '2.0000000001'],
2791+
['1267650600228229401496703205377', 100, 10, RoundingMode::HalfUp, '2.0000000000'],
2792+
2793+
// 2^100 - 1
2794+
['1267650600228229401496703205375', 100, 10, RoundingMode::Unnecessary, 'NTH_ROOT_NOT_EXACT'],
2795+
['1267650600228229401496703205375', 100, 10, RoundingMode::Down, '1.9999999999'],
2796+
['1267650600228229401496703205375', 100, 10, RoundingMode::Up, '2.0000000000'],
2797+
['1267650600228229401496703205375', 100, 10, RoundingMode::HalfUp, '2.0000000000'],
2798+
2799+
// n = 101
2800+
2801+
// -(2^101)
2802+
['-2535301200456458802993406410752', 101, 10, RoundingMode::Unnecessary, '-2.0000000000'],
2803+
2804+
// -(2^101 + 1)
2805+
['-2535301200456458802993406410753', 101, 10, RoundingMode::Unnecessary, 'NTH_ROOT_NOT_EXACT'],
2806+
['-2535301200456458802993406410753', 101, 10, RoundingMode::Down, '-2.0000000000'],
2807+
['-2535301200456458802993406410753', 101, 10, RoundingMode::Up, '-2.0000000001'],
2808+
['-2535301200456458802993406410753', 101, 10, RoundingMode::HalfUp, '-2.0000000000'],
2809+
2810+
// -(2^101 - 1)
2811+
['-2535301200456458802993406410751', 101, 10, RoundingMode::Unnecessary, 'NTH_ROOT_NOT_EXACT'],
2812+
['-2535301200456458802993406410751', 101, 10, RoundingMode::Down, '-1.9999999999'],
2813+
['-2535301200456458802993406410751', 101, 10, RoundingMode::Up, '-2.0000000000'],
2814+
['-2535301200456458802993406410751', 101, 10, RoundingMode::HalfUp, '-2.0000000000'],
27422815
];
27432816

27442817
foreach ($tests as [$number, $n, $scale, $roundingMode, $expected]) {

tests/BigIntegerTest.php

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3306,6 +3306,40 @@ public static function providerNthRoot(): Generator
33063306

33073307
// 2^100 is exact.
33083308
['1267650600228229401496703205376', 100, RoundingMode::Unnecessary, '2'],
3309+
3310+
// n = 1000
3311+
3312+
// 2^1000
3313+
['10715086071862673209484250490600018105614048117055336074437503883703510511249361224931983788156958581275946729175531468251871452856923140435984577574698574803934567774824230985421074605062371141877954182153046474983581941267398767559165543946077062914571196477686542167660429831652624386837205668069376', 1000, RoundingMode::Unnecessary, '2'],
3314+
3315+
// 2^1000 + 1
3316+
['10715086071862673209484250490600018105614048117055336074437503883703510511249361224931983788156958581275946729175531468251871452856923140435984577574698574803934567774824230985421074605062371141877954182153046474983581941267398767559165543946077062914571196477686542167660429831652624386837205668069377', 1000, RoundingMode::Unnecessary, null],
3317+
['10715086071862673209484250490600018105614048117055336074437503883703510511249361224931983788156958581275946729175531468251871452856923140435984577574698574803934567774824230985421074605062371141877954182153046474983581941267398767559165543946077062914571196477686542167660429831652624386837205668069377', 1000, RoundingMode::Down, '2'],
3318+
['10715086071862673209484250490600018105614048117055336074437503883703510511249361224931983788156958581275946729175531468251871452856923140435984577574698574803934567774824230985421074605062371141877954182153046474983581941267398767559165543946077062914571196477686542167660429831652624386837205668069377', 1000, RoundingMode::Up, '3'],
3319+
['10715086071862673209484250490600018105614048117055336074437503883703510511249361224931983788156958581275946729175531468251871452856923140435984577574698574803934567774824230985421074605062371141877954182153046474983581941267398767559165543946077062914571196477686542167660429831652624386837205668069377', 1000, RoundingMode::HalfUp, '2'],
3320+
3321+
// 2^1000 - 1
3322+
['10715086071862673209484250490600018105614048117055336074437503883703510511249361224931983788156958581275946729175531468251871452856923140435984577574698574803934567774824230985421074605062371141877954182153046474983581941267398767559165543946077062914571196477686542167660429831652624386837205668069375', 1000, RoundingMode::Unnecessary, null],
3323+
['10715086071862673209484250490600018105614048117055336074437503883703510511249361224931983788156958581275946729175531468251871452856923140435984577574698574803934567774824230985421074605062371141877954182153046474983581941267398767559165543946077062914571196477686542167660429831652624386837205668069375', 1000, RoundingMode::Down, '1'],
3324+
['10715086071862673209484250490600018105614048117055336074437503883703510511249361224931983788156958581275946729175531468251871452856923140435984577574698574803934567774824230985421074605062371141877954182153046474983581941267398767559165543946077062914571196477686542167660429831652624386837205668069375', 1000, RoundingMode::Up, '2'],
3325+
['10715086071862673209484250490600018105614048117055336074437503883703510511249361224931983788156958581275946729175531468251871452856923140435984577574698574803934567774824230985421074605062371141877954182153046474983581941267398767559165543946077062914571196477686542167660429831652624386837205668069375', 1000, RoundingMode::HalfUp, '2'],
3326+
3327+
// n = 1001
3328+
3329+
// -(2^1001)
3330+
['-21430172143725346418968500981200036211228096234110672148875007767407021022498722449863967576313917162551893458351062936503742905713846280871969155149397149607869135549648461970842149210124742283755908364306092949967163882534797535118331087892154125829142392955373084335320859663305248773674411336138752', 1001, RoundingMode::Unnecessary, '-2'],
3331+
3332+
// -(2^1001 + 1)
3333+
['-21430172143725346418968500981200036211228096234110672148875007767407021022498722449863967576313917162551893458351062936503742905713846280871969155149397149607869135549648461970842149210124742283755908364306092949967163882534797535118331087892154125829142392955373084335320859663305248773674411336138753', 1001, RoundingMode::Unnecessary, null],
3334+
['-21430172143725346418968500981200036211228096234110672148875007767407021022498722449863967576313917162551893458351062936503742905713846280871969155149397149607869135549648461970842149210124742283755908364306092949967163882534797535118331087892154125829142392955373084335320859663305248773674411336138753', 1001, RoundingMode::Down, '-2'],
3335+
['-21430172143725346418968500981200036211228096234110672148875007767407021022498722449863967576313917162551893458351062936503742905713846280871969155149397149607869135549648461970842149210124742283755908364306092949967163882534797535118331087892154125829142392955373084335320859663305248773674411336138753', 1001, RoundingMode::Up, '-3'],
3336+
['-21430172143725346418968500981200036211228096234110672148875007767407021022498722449863967576313917162551893458351062936503742905713846280871969155149397149607869135549648461970842149210124742283755908364306092949967163882534797535118331087892154125829142392955373084335320859663305248773674411336138753', 1001, RoundingMode::HalfUp, '-2'],
3337+
3338+
// -(2^1001 - 1)
3339+
['-21430172143725346418968500981200036211228096234110672148875007767407021022498722449863967576313917162551893458351062936503742905713846280871969155149397149607869135549648461970842149210124742283755908364306092949967163882534797535118331087892154125829142392955373084335320859663305248773674411336138751', 1001, RoundingMode::Unnecessary, null],
3340+
['-21430172143725346418968500981200036211228096234110672148875007767407021022498722449863967576313917162551893458351062936503742905713846280871969155149397149607869135549648461970842149210124742283755908364306092949967163882534797535118331087892154125829142392955373084335320859663305248773674411336138751', 1001, RoundingMode::Down, '-1'],
3341+
['-21430172143725346418968500981200036211228096234110672148875007767407021022498722449863967576313917162551893458351062936503742905713846280871969155149397149607869135549648461970842149210124742283755908364306092949967163882534797535118331087892154125829142392955373084335320859663305248773674411336138751', 1001, RoundingMode::Up, '-2'],
3342+
['-21430172143725346418968500981200036211228096234110672148875007767407021022498722449863967576313917162551893458351062936503742905713846280871969155149397149607869135549648461970842149210124742283755908364306092949967163882534797535118331087892154125829142392955373084335320859663305248773674411336138751', 1001, RoundingMode::HalfUp, '-2'],
33093343
];
33103344

33113345
foreach ($tests as [$number, $n, $roundingMode, $expected]) {

0 commit comments

Comments
 (0)