Commit | Line | Data |
32c34379 |
1 | #!/usr/bin/perl |
2 | |
3 | use strict; |
4 | use warnings; |
5 | use List::Util qw(sum); |
6 | use Data::Dumper; |
7 | |
8 | use Test::More; |
9 | |
10 | |
11 | my @bind_tests = ( |
12 | # scalar - equal |
13 | { |
14 | equal => 1, |
15 | bindvals => [ |
16 | undef, |
17 | undef, |
18 | ] |
19 | }, |
20 | { |
21 | equal => 1, |
22 | bindvals => [ |
23 | 'foo', |
24 | 'foo', |
25 | ] |
26 | }, |
27 | { |
28 | equal => 1, |
29 | bindvals => [ |
30 | 42, |
31 | 42, |
32 | '42', |
33 | ] |
34 | }, |
35 | |
36 | # scalarref - equal |
37 | { |
38 | equal => 1, |
39 | bindvals => [ |
40 | \'foo', |
41 | \'foo', |
42 | ] |
43 | }, |
44 | { |
45 | equal => 1, |
46 | bindvals => [ |
47 | \42, |
48 | \42, |
49 | \'42', |
50 | ] |
51 | }, |
52 | |
53 | # arrayref - equal |
54 | { |
55 | equal => 1, |
56 | bindvals => [ |
57 | [], |
58 | [] |
59 | ] |
60 | }, |
61 | { |
62 | equal => 1, |
63 | bindvals => [ |
64 | [42], |
65 | [42], |
66 | ['42'], |
67 | ] |
68 | }, |
69 | { |
70 | equal => 1, |
71 | bindvals => [ |
72 | [1, 42], |
73 | [1, 42], |
74 | ['1', 42], |
75 | [1, '42'], |
76 | ['1', '42'], |
77 | ] |
78 | }, |
79 | |
80 | # hashref - equal |
81 | { |
82 | equal => 1, |
83 | bindvals => [ |
84 | { foo => 42 }, |
85 | { foo => 42 }, |
86 | { foo => '42' }, |
87 | ] |
88 | }, |
89 | { |
90 | equal => 1, |
91 | bindvals => [ |
92 | { foo => 42, bar => 1 }, |
93 | { foo => 42, bar => 1 }, |
94 | { foo => '42', bar => 1 }, |
95 | ] |
96 | }, |
97 | |
98 | # blessed object - equal |
99 | { |
100 | equal => 1, |
101 | bindvals => [ |
102 | bless(\(local $_ = 42), 'Life::Universe::Everything'), |
103 | bless(\(local $_ = 42), 'Life::Universe::Everything'), |
104 | ] |
105 | }, |
106 | { |
107 | equal => 1, |
108 | bindvals => [ |
109 | bless([42], 'Life::Universe::Everything'), |
110 | bless([42], 'Life::Universe::Everything'), |
111 | ] |
112 | }, |
113 | { |
114 | equal => 1, |
115 | bindvals => [ |
116 | bless({ answer => 42 }, 'Life::Universe::Everything'), |
117 | bless({ answer => 42 }, 'Life::Universe::Everything'), |
118 | ] |
119 | }, |
120 | |
121 | # complex data structure - equal |
122 | { |
123 | equal => 1, |
124 | bindvals => [ |
125 | [42, { foo => 'bar', quux => [1, 2, \3, { quux => [4, 5] } ] }, 8 ], |
126 | [42, { foo => 'bar', quux => [1, 2, \3, { quux => [4, 5] } ] }, 8 ], |
127 | ] |
128 | }, |
129 | |
130 | |
131 | # scalar - different |
132 | { |
133 | equal => 0, |
134 | bindvals => [ |
135 | undef, |
136 | 'foo', |
137 | 42, |
138 | ] |
139 | }, |
140 | |
141 | # scalarref - different |
142 | { |
143 | equal => 0, |
144 | bindvals => [ |
145 | \undef, |
146 | \'foo', |
147 | \42, |
148 | ] |
149 | }, |
150 | |
151 | # arrayref - different |
152 | { |
153 | equal => 0, |
154 | bindvals => [ |
155 | [undef], |
156 | ['foo'], |
157 | [42], |
158 | ] |
159 | }, |
160 | |
161 | # hashref - different |
162 | { |
163 | equal => 0, |
164 | bindvals => [ |
165 | { foo => undef }, |
166 | { foo => 'bar' }, |
167 | { foo => 42 }, |
168 | ] |
169 | }, |
170 | |
171 | # different types |
172 | { |
173 | equal => 0, |
174 | bindvals => [ |
175 | 'foo', |
176 | \'foo', |
177 | ['foo'], |
178 | { foo => 'bar' }, |
179 | ] |
180 | }, |
181 | |
182 | # complex data structure - different |
183 | { |
184 | equal => 0, |
185 | bindvals => [ |
186 | [42, { foo => 'bar', quux => [1, 2, \3, { quux => [4, 5] } ] }, 8 ], |
187 | [43, { foo => 'bar', quux => [1, 2, \3, { quux => [4, 5] } ] }, 8 ], |
188 | [42, { foo => 'baz', quux => [1, 2, \3, { quux => [4, 5] } ] }, 8 ], |
189 | [42, { bar => 'bar', quux => [1, 2, \3, { quux => [4, 5] } ] }, 8 ], |
190 | [42, { foo => 'bar', quuux => [1, 2, \3, { quux => [4, 5] } ] }, 8 ], |
191 | [42, { foo => 'bar', quux => [0, 1, 2, \3, { quux => [4, 5] } ] }, 8 ], |
192 | [42, { foo => 'bar', quux => [1, 2, 3, { quux => [4, 5] } ] }, 8 ], |
193 | [42, { foo => 'bar', quux => [1, 2, \4, { quux => [4, 5] } ] }, 8 ], |
194 | [42, { foo => 'bar', quux => [1, 2, \3, { quuux => [4, 5] } ] }, 8 ], |
195 | [42, { foo => 'bar', quux => [1, 2, \3, { quux => [4, 5, 6] } ] }, 8 ], |
196 | [42, { foo => 'bar', quux => [1, 2, \3, { quux => 4 } ] }, 8 ], |
197 | [42, { foo => 'bar', quux => [1, 2, \3, { quux => [4, 5], quuux => 1 } ] }, 8 ], |
198 | [42, { foo => 'bar', quux => [1, 2, \3, { quux => [4, 5] } ] }, 8, 9 ], |
199 | ] |
200 | }, |
201 | ); |
202 | |
203 | |
204 | plan tests => 1 + sum |
205 | map { $_ * ($_ - 1) / 2 } |
206 | map { scalar @{$_->{bindvals}} } |
207 | @bind_tests; |
208 | |
209 | use_ok('SQL::Abstract::Test', import => [qw(eq_sql eq_bind is_same_sql_bind)]); |
210 | |
211 | for my $test (@bind_tests) { |
212 | my $bindvals = $test->{bindvals}; |
213 | while (@$bindvals) { |
214 | my $bind1 = shift @$bindvals; |
215 | foreach my $bind2 (@$bindvals) { |
216 | my $equal = eq_bind($bind1, $bind2); |
217 | if ($test->{equal}) { |
218 | ok($equal, "equal bind values considered equal"); |
219 | } else { |
220 | ok(!$equal, "different bind values considered not equal"); |
221 | } |
222 | |
223 | if ($equal ^ $test->{equal}) { |
224 | diag("bind1: " . Dumper($bind1)); |
225 | diag("bind2: " . Dumper($bind2)); |
226 | } |
227 | } |
228 | } |
229 | } |