<?php
require_once __DIR__ . '/../../../src/chapter08/question8.11/CoinCalculator.php';

class CoinCalculatorTest extends \PHPUnit\Framework\TestCase {

    /**
     * @dataProvider getTestCases
     */
    public function testGetNumberOfWaysToMakeChange($n, $numberOfWays) {
        $this->assertEquals($numberOfWays, CoinCalculator::getNumberOfWaysToMakeChange($n));
    }

    public function getTestCases() {
        return [
            [0, 1],
            [1, 1],
            [2, 1],
            [3, 1],
            [4, 1],
            [5, 2],
            [6, 2],
            [7, 2],
            [8, 2],
            [9, 2],
            [10, 4],
            [11, 4],
            [12, 4],
            [13, 4],
            [14, 4],
            [15, 6],
            [16, 6],
            [17, 6],
            [18, 6],
            [19, 6],
            [20, 9],
            [21, 9],
            [22, 9],
            [23, 9],
            [24, 9],
            [25, 13],
            [26, 13],
            [27, 13],
            [28, 13],
            [29, 13],
            [30, 18],
            [31, 18],
            [32, 18],
            [33, 18],
            [34, 18],
            [35, 24],
            [36, 24],
            [37, 24],
            [38, 24],
            [39, 24],
            [40, 31],
            [41, 31],
            [42, 31],
            [43, 31],
            [44, 31],
            [45, 39],
            [46, 39],
            [47, 39],
            [48, 39],
            [49, 39],
            [50, 49],
            [51, 49],
            [52, 49],
            [53, 49],
            [54, 49],
            [55, 60],
            [56, 60],
            [57, 60],
            [58, 60],
            [59, 60],
            [60, 73],
            [61, 73],
            [62, 73],
            [63, 73],
            [64, 73],
            [65, 87],
            [66, 87],
            [67, 87],
            [68, 87],
            [69, 87],
            [70, 103],
            [71, 103],
            [72, 103],
            [73, 103],
            [74, 103],
            [75, 121],
            [76, 121],
            [77, 121],
            [78, 121],
            [79, 121],
            [80, 141],
            [81, 141],
            [82, 141],
            [83, 141],
            [84, 141],
            [85, 163],
            [86, 163],
            [87, 163],
            [88, 163],
            [89, 163],
            [90, 187],
            [91, 187],
            [92, 187],
            [93, 187],
            [94, 187],
            [95, 213],
            [96, 213],
            [97, 213],
            [98, 213],
            [99, 213],
            [100, 242],
            [101, 242],
            [102, 242],
            [103, 242],
            [104, 242],
            [105, 273],
            [106, 273],
            [107, 273],
            [108, 273],
            [109, 273],
            [110, 307],
            [111, 307],
            [112, 307],
            [113, 307],
            [114, 307],
            [115, 343],
            [116, 343],
            [117, 343],
            [118, 343],
            [119, 343],
            [120, 382],
            [121, 382],
            [122, 382],
            [123, 382],
            [124, 382],
            [125, 424],
            [126, 424],
            [127, 424],
            [128, 424],
            [129, 424],
            [130, 469],
            [131, 469],
            [132, 469],
            [133, 469],
            [134, 469],
            [135, 517],
            [136, 517],
            [137, 517],
            [138, 517],
            [139, 517],
            [140, 568],
            [141, 568],
            [142, 568],
            [143, 568],
            [144, 568],
            [145, 622],
            [146, 622],
            [147, 622],
            [148, 622],
            [149, 622],
            [150, 680],
            [151, 680],
            [152, 680],
            [153, 680],
            [154, 680],
            [155, 741],
            [156, 741],
            [157, 741],
            [158, 741],
            [159, 741],
            [160, 806],
            [161, 806],
            [162, 806],
            [163, 806],
            [164, 806],
            [165, 874],
            [166, 874],
            [167, 874],
            [168, 874],
            [169, 874],
            [170, 946],
            [171, 946],
            [172, 946],
            [173, 946],
            [174, 946],
            [175, 1022],
            [176, 1022],
            [177, 1022],
            [178, 1022],
            [179, 1022],
            [180, 1102],
            [181, 1102],
            [182, 1102],
            [183, 1102],
            [184, 1102],
            [185, 1186],
            [186, 1186],
            [187, 1186],
            [188, 1186],
            [189, 1186],
            [190, 1274],
            [191, 1274],
            [192, 1274],
            [193, 1274],
            [194, 1274],
            [195, 1366],
            [196, 1366],
            [197, 1366],
            [198, 1366],
            [199, 1366],
            [100000, 133423351001],
            [300322, 3612344074348]
        ];
    }
}
