Added myself to the contributors list.
[scpubgit/Q-Branch.git] / t / 10test.t
CommitLineData
32c34379 1#!/usr/bin/perl
2
3use strict;
4use warnings;
5use List::Util qw(sum);
6use Data::Dumper;
7
8use Test::More;
9
10
11my @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
204plan tests => 1 + sum
205 map { $_ * ($_ - 1) / 2 }
206 map { scalar @{$_->{bindvals}} }
207 @bind_tests;
208
209use_ok('SQL::Abstract::Test', import => [qw(eq_sql eq_bind is_same_sql_bind)]);
210
211for 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}