1<?php
2
3/**
4 * Hoa
5 *
6 *
7 * @license
8 *
9 * New BSD License
10 *
11 * Copyright © 2007-2017, Hoa community. All rights reserved.
12 *
13 * Redistribution and use in source and binary forms, with or without
14 * modification, are permitted provided that the following conditions are met:
15 *     * Redistributions of source code must retain the above copyright
16 *       notice, this list of conditions and the following disclaimer.
17 *     * Redistributions in binary form must reproduce the above copyright
18 *       notice, this list of conditions and the following disclaimer in the
19 *       documentation and/or other materials provided with the distribution.
20 *     * Neither the name of the Hoa nor the names of its contributors may be
21 *       used to endorse or promote products derived from this software without
22 *       specific prior written permission.
23 *
24 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
25 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
26 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
27 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS AND CONTRIBUTORS BE
28 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
29 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
30 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
31 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
32 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
33 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
34 * POSSIBILITY OF SUCH DAMAGE.
35 */
36
37namespace Hoa\Math\Test\Unit\Combinatorics\Combination;
38
39use Hoa\Math\Combinatorics\Combination as CUT;
40use Hoa\Test;
41
42/**
43 * Class \Hoa\Math\Test\Unit\Combinatorics\Combination.
44 *
45 * Test suite of the Γ combination.
46 *
47 * @copyright  Copyright © 2007-2017 Hoa community
48 * @license    New BSD License
49 */
50class Combination extends Test\Unit\Suite
51{
52    public function case_empty()
53    {
54        $this
55            ->given(
56                $n           = 0,
57                $k           = 0,
58                $withoutZero = false
59            )
60            ->when($result = CUT::Γ($n, $k, $withoutZero))
61            ->then
62                ->array($result)
63                    ->isEmpty();
64    }
65
66    public function case_n2_k3()
67    {
68        $this
69            ->given(
70                $n           = 2,
71                $k           = 3,
72                $withoutZero = false
73            )
74            ->when($result = CUT::Γ($n, $k, $withoutZero))
75            ->then
76                ->array($result)
77                    ->isEqualTo([
78                        [3, 0],
79                        [2, 1],
80                        [1, 2],
81                        [0, 3]
82                    ]);
83    }
84
85    public function case_n3_k2()
86    {
87        $this
88            ->given(
89                $n           = 3,
90                $k           = 2,
91                $withoutZero = false
92            )
93            ->when($result = CUT::Γ($n, $k, $withoutZero))
94            ->then
95                ->array($result)
96                    ->isEqualTo([
97                        [2, 0, 0],
98                        [1, 1, 0],
99                        [1, 0, 1],
100                        [0, 2, 0],
101                        [0, 1, 1],
102                        [0, 0, 2]
103                    ]);
104    }
105
106    public function case_n2_k3_without_zero()
107    {
108        $this
109            ->given(
110                $n           = 2,
111                $k           = 3,
112                $withoutZero = true
113            )
114            ->when($result = CUT::Γ($n, $k, $withoutZero))
115            ->then
116                ->array($result)
117                    ->isEqualTo([
118                        [2, 1],
119                        [1, 2]
120                    ]);
121    }
122
123    public function case_n3_k2_without_zero()
124    {
125        $this
126            ->given(
127                $n           = 3,
128                $k           = 2,
129                $withoutZero = true
130            )
131            ->when($result = CUT::Γ($n, $k, $withoutZero))
132            ->then
133                ->array($result)
134                    ->isEmpty();
135    }
136}
137