1# -*- coding: utf-8 -*-
2
3import datetime
4import decimal
5import operator
6import re
7
8import pydash as _
9
10from . import fixtures
11from .fixtures import parametrize
12
13
14@parametrize('value,other,expected', [
15    ('a', 'a', True),
16    (None, None, True),
17    (None, '', False),
18    (1, str(1), False)
19])
20def test_eq(value, other, expected):
21    assert _.eq(value, other) == expected
22
23
24@parametrize('case,expected', [
25    ((2, 1), True),
26    ((2.5, 2.3), True),
27    ((1, 2), False),
28    ((2.3, 2.5), False),
29    ((1, 1), False),
30])
31def test_gt(case, expected):
32    assert _.gt(*case) == expected
33
34
35@parametrize('case,expected', [
36    ((2, 1), True),
37    ((2.5, 2.3), True),
38    ((1, 2), False),
39    ((2.3, 2.5), False),
40    ((1, 1), True),
41])
42def test_gte(case, expected):
43    assert _.gte(*case) == expected
44
45
46@parametrize('case,expected', [
47    ((2, 1), False),
48    ((2.5, 2.3), False),
49    ((1, 2), True),
50    ((2.3, 2.5), True),
51    ((1, 1), False),
52])
53def test_lt(case, expected):
54    assert _.lt(*case) == expected
55
56
57@parametrize('case,expected', [
58    ((2, 1), False),
59    ((2.5, 2.3), False),
60    ((1, 2), True),
61    ((2.3, 2.5), True),
62    ((1, 1), True),
63])
64def test_lte(case, expected):
65    assert _.lte(*case) == expected
66
67
68@parametrize('case,expected', [
69    ((3, 2, 4), True),
70    ((4, 8), True),
71    ((4, 2), False),
72    ((2, 2), False),
73    ((1.2, 2), True),
74    ((5.2, 4), False),
75    (('', 5), False),
76    ((2, ''), False),
77    ((-1, -2, ''), True),
78])
79def test_in_range(case, expected):
80    assert _.in_range(*case) == expected
81
82
83@parametrize('case,expected', [
84    ([], True),
85    ({}, True),
86    ('', True),
87    (0, False),
88    (True, False),
89])
90def test_is_associative(case, expected):
91    assert _.is_associative(case) == expected
92
93
94@parametrize('case,expected', [
95    ('', True),
96    ('\n', True),
97    (' ', True),
98    ('a', False),
99])
100def test_is_blank(case, expected):
101    assert _.is_blank(case) == expected
102
103
104@parametrize('case,expected', [
105    (True, True),
106    (False, True),
107    (0, False),
108    ('', False),
109])
110def test_is_boolean(case, expected):
111    assert _.is_boolean(case) == expected
112
113
114@parametrize('case,expected', [
115    (list, True),
116    (dict, True),
117    ([].append, True),
118    ({}.update, True),
119    (1, True),
120    (True, True),
121    (None, True),
122    (datetime, False),
123    (parametrize, False),
124    ('a', False),
125    (lambda: None, False),
126])
127def test_is_builtin(case, expected):
128    assert _.is_builtin(case) == expected
129
130
131@parametrize('case,expected', [
132    (datetime.date.today(), True),
133    (datetime.datetime.today(), True),
134    ('2014-01-01', False),
135    ('2014-01-01T00:00:00', False),
136    (1, False)
137])
138def test_is_date(case, expected):
139    assert _.is_date(case) == expected
140
141
142@parametrize('case,expected', [
143    ([3, 2, 1], True),
144    ([6, 5, 5], True),
145    (0, True),
146    ([5, 4, 4, 3, 1], True),
147    ([5, 4, 4, 5, 4, 3], False)
148])
149def test_is_decreasing(case, expected):
150    assert _.is_decreasing(case) == expected
151
152
153@parametrize('case,expected', [
154    ({}, True),
155    ([], False),
156    (1, False),
157    ('a', False),
158    (iter([]), False),
159    (iter({}), False)
160])
161def test_is_dict(case, expected):
162    assert _.is_dict(case) == expected
163
164
165@parametrize('case,expected', [
166    (True, True),
167    (0, True),
168    (123.45, True),
169    ('', True),
170    ({}, True),
171    ([], True),
172    (False, True),
173    (None, True),
174    ({'a': 1}, False),
175    ([1], False),
176    ('Hello', False),
177    (['Hello', 'World'], False),
178])
179def test_is_empty(case, expected):
180    assert _.is_empty(case) == expected
181
182
183@parametrize('case,expected', [
184    ((1, 1), True),
185    ((1, 2), False),
186    (('1', '1'), True),
187    (('1', '2'), False),
188    (([1], {'a': 1}), False),
189    (({'a': 1}, {'a': 1}), True),
190    (({'a': 1}, {'b': 1}), False),
191    (([1, 2, 3], [1, 2, 3]), True),
192    (([1, 2, 3], [1, 2]), False),
193    (([1, 2], [1, 2, 3]), False),
194    (([1, 2, 3], [1, 2]), False),
195    (([1, 2], [1, 2, 3]), False),
196    ((['hello', 'goodbye'], ['hi', 'goodbye']), False)
197])
198def test_is_equal(case, expected):
199    assert _.is_equal(*case) == expected
200
201
202@parametrize('case,expected', [
203    ((1, 1, None), True),
204    ((1, 2, None), False),
205    (('1', '1', None), True),
206    (('1', '2', None), False),
207    (([1], {'a': 1}, None), False),
208    (([1], {'a': 1}, lambda a, b: True), True),
209    (({'a': 1}, {'a': 1}, None), True),
210    (({'a': 1}, {'b': 1}, lambda a, b: None if isinstance(a, dict) else True),
211     False),
212    (([1, 2, 3], [1, 2, 3], None), True),
213    (([1, 2, 3], [1, 2], None), False),
214    (([1, 2], [1, 2, 3], None), False),
215    (([1, 2, 3], [1, 2], lambda a, b: None if isinstance(a, list) else True),
216     False),
217    (([1, 2], [1, 2, 3], lambda a, b: None if isinstance(a, list) else True),
218     False),
219    ((['hello', 'goodbye'], ['hi', 'goodbye'], fixtures.is_equal_iteratee0),
220     True)
221])
222def test_is_equal_with(case, expected):
223    assert _.is_equal_with(*case) == expected
224
225
226@parametrize('case,expected', [
227    (Exception(), True),
228    ({}, False),
229    ([], False)
230])
231def test_is_error(case, expected):
232    assert _.is_error(case) == expected
233
234
235@parametrize('case,expected', [
236    (2, True),
237    (16, True),
238    (1, False),
239    (3.0, False),
240    (3.5, False),
241    (None, False),
242])
243def test_is_even(case, expected):
244    assert _.is_even(case) == expected
245
246
247@parametrize('case,expected', [
248    (1.0, True),
249    (3.245, True),
250    (1, False),
251    (True, False),
252    ('', False),
253])
254def test_is_float(case, expected):
255    assert _.is_float(case) == expected
256
257
258@parametrize('case,expected', [
259    (lambda x: x + 1, True),
260    ('Hello, world!', False),
261])
262def test_is_function(case, expected):
263    assert _.is_function(case) == expected
264
265
266@parametrize('case,expected', [
267    ([1, 2, 3], True),
268    ([5, 5, 6], True),
269    (0, True),
270    ([1, 2, 3, 4, 4, 5], True),
271    ([1, 2, 3, 4, 4, 3], False)
272])
273def test_is_increasing(case, expected):
274    assert _.is_increasing(case) == expected
275
276
277@parametrize('case,expected', [
278    ([], True),
279    ('', True),
280    ((), True),
281    ({}, False),
282    (1, False),
283    (None, False),
284])
285def test_is_indexed(case, expected):
286    assert _.is_indexed(case) == expected
287
288
289@parametrize('case,expected', [
290    ((1, int), True),
291    ((1.0, float), True),
292    (([], (list, str)), True),
293    (([], dict), False),
294    ((True, float), False),
295])
296def test_is_instance_of(case, expected):
297    assert _.is_instance_of(*case) == expected
298
299
300@parametrize('case,expected', [
301    (1, True),
302    (2, True),
303    (1.0, False),
304    (True, False),
305    (None, False),
306    ([], False),
307])
308def test_is_integer(case, expected):
309    assert _.is_integer(case) == expected
310
311
312@parametrize('case,expected', [
313    ([], True),
314    ({}, True),
315    ((), True),
316    ('a', True),
317    (5, False),
318    (None, False),
319])
320def test_is_iterable(case, expected):
321    assert _.is_iterable(case) == expected
322
323
324@parametrize('case,expected', [
325    ('{"one": 1, "two": {"three": "3"}, "four": [4]}', True),
326    ({"one": 1, "two": {"three": "3"}, "four": [4]}, False),
327    ('', False),
328    (1, False),
329    (True, False),
330])
331def test_is_json(case, expected):
332    assert _.is_json(case) == expected
333
334
335@parametrize('case,expected', [
336    ([1, 2, 3], True),
337    ({}, False),
338])
339def test_is_list(case, expected):
340    assert _.is_list(case) == expected
341
342
343@parametrize('case,expected', [
344    (({'name': 'fred', 'age': 40}, {'age': 40}), True),
345    (({'name': 'fred', 'age': 40}, {'age': 40, 'active': True}), False),
346    (([1, 2, 3], [1, 2]), True),
347    (([1, 2, 3], [1, 2, 3, 4]), False),
348    (({}, {}), True),
349    (({'a': 1}, {}), True),
350    (([], []), True),
351    (([1], []), True),
352])
353def test_is_match(case, expected):
354    assert _.is_match(*case) == expected
355
356
357@parametrize('case,expected', [
358    (([1, 2],
359      [2, 4],
360      lambda a, b: None if isinstance(a, list) else b == a + a),
361     True),
362    (([1, 2],
363      [2, 4],
364      lambda a, b, key: a == b == key),
365     False),
366    (([0, 1],
367      [0, 1],
368      lambda a, b, key: a == b == key),
369     True),
370])
371def test_is_match_with(case, expected):
372    assert _.is_match_with(*case) == expected
373
374
375@parametrize('case,expected', [
376    (([1, 2, 3], operator.le), True),
377    (([3, 2, 1], operator.ge), True),
378    (([1, 1, 2], operator.lt), False),
379    (([3, 3, 2], operator.gt), False),
380])
381def test_is_monotone(case, expected):
382    assert _.is_monotone(*case) == expected
383
384
385@parametrize('case,expected', [
386    (0, False),
387    (123456789123456789123456789, False),
388    (123.45, False),
389    (decimal.Decimal(1), False),
390    ('1', True)
391])
392def test_is_nan(case, expected):
393    assert _.is_nan(case) == expected
394
395
396@parametrize('case,expected', [
397    (-1, True),
398    (-1.25, True),
399    (-0.1, True),
400    (0, False),
401    (1, False),
402    (True, False),
403    (False, False)
404])
405def test_is_negative(case, expected):
406    assert _.is_negative(case) == expected
407
408
409@parametrize('case,expected', [
410    (None, True),
411    (0, False),
412])
413def test_is_none(case, expected):
414    assert _.is_none(case) == expected
415
416
417@parametrize('case,expected', [
418    (0, True),
419    (123456789123456789123456789, True),
420    (123.45, True),
421    (decimal.Decimal(1), True),
422    ('1', False),
423    (True, False),
424    (False, False),
425])
426def test_is_number(case, expected):
427    assert _.is_number(case) == expected
428
429
430@parametrize('case,expected', [
431    ({}, True),
432    ([], True),
433    (1, False),
434    ('a', False),
435    (iter([]), False),
436    (iter({}), False)
437])
438def test_is_object(case, expected):
439    assert _.is_object(case) == expected
440
441
442@parametrize('case,expected', [
443    (1, True),
444    (3.0, True),
445    (3.5, True),
446    (2, False),
447    (16, False),
448    (None, False),
449])
450def test_is_odd(case, expected):
451    assert _.is_odd(case) == expected
452
453
454@parametrize('case,expected', [
455    (1, True),
456    (1.25, True),
457    (0.1, True),
458    (-1, False),
459    (0, False),
460    (True, False),
461    (False, False)
462])
463def test_is_positive(case, expected):
464    assert _.is_positive(case) == expected
465
466
467@parametrize('case,expected', [
468    (re.compile(''), True),
469    ('', False),
470    ('Hello, world!', False),
471    (1, False),
472    ({}, False),
473    ([], False),
474    (None, False)
475])
476def test_is_reg_exp(case, expected):
477    assert _.is_reg_exp(case) == expected
478
479
480@parametrize('case,expected', [
481    (set(), True),
482    ([1, 2, 3], False)
483])
484def test_is_set(case, expected):
485    assert _.is_set(case) == expected
486
487
488@parametrize('case,expected', [
489    ([1, 2, 3], False),
490    ([3, 2, 1], True),
491    ([1, 1, 2], False),
492    ([3, 3, 2], False),
493])
494def test_is_strictly_decreasing(case, expected):
495    assert _.is_strictly_decreasing(case) == expected
496
497
498@parametrize('case,expected', [
499    ([1, 2, 3], True),
500    ([3, 2, 1], False),
501    ([1, 1, 2], False),
502    ([3, 3, 2], False),
503])
504def test_is_strictly_increasing(case, expected):
505    assert _.is_strictly_increasing(case) == expected
506
507
508@parametrize('case,expected', [
509    ('', True),
510    ('Hello, world!', True),
511    (1, False),
512    ({}, False),
513    ([], False),
514    (None, False)
515])
516def test_is_string(case, expected):
517    assert _.is_string(case) == expected
518
519
520@parametrize('case,expected', [
521    ((), True),
522    ([], False),
523    ({}, False),
524])
525def test_is_tuple(case, expected):
526    assert _.is_tuple(case) == expected
527
528
529@parametrize('case,expected', [
530    (0, True),
531    (0.0, False),
532    ('', False),
533    (True, False),
534    (False, False),
535])
536def test_is_zero(case, expected):
537    assert _.is_zero(case) == expected
538