Skip to content

Commit 7468c26

Browse files
committed
[GR-23216] Make test_dictviews pass - fixed DictViewBuiltins.
PullRequest: graalpython/1002
2 parents c8867a9 + 10f1a5b commit 7468c26

File tree

5 files changed

+373
-21
lines changed

5 files changed

+373
-21
lines changed

graalpython/com.oracle.graal.python.test/src/tests/test_dict.py

Lines changed: 175 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -331,7 +331,181 @@ def test_dictview_set_operations_on_keys():
331331
assert k1 | k2 == {1, 2, 3}
332332
assert k1 ^ k2 == {3}
333333
assert k1 ^ k3 == {1, 2, 4}
334-
334+
335+
def test_dictview_keys_operations():
336+
d1 = {'a': 1, 'b': 2}
337+
338+
# &
339+
assert d1.keys() & 'b' == {'b'}
340+
assert d1.keys() & 'ab' == {'a', 'b'}
341+
assert d1.keys() & ['a'] == {'a'}
342+
assert d1.keys() & ['a', 'b'] == {'a', 'b'}
343+
assert d1.keys() & [1, 2] == set()
344+
assert d1.keys() & ('a') == {'a'}
345+
assert d1.keys() & ('a', 'b') == {'a', 'b'}
346+
assert d1.keys() & {('a', 1)} == set()
347+
assert d1.keys() & d1 == {'a', 'b'}
348+
assert d1.keys() & d1.values() == set()
349+
assert d1.keys() & {1:'a', 2:'b'}.values() == {'a', 'b'}
350+
assert {1:1, 2:2}.keys() & range(1,3) == {1, 2}
351+
352+
def chargen(c1, c2):
353+
for c in range(ord(c1), ord(c2)+1):
354+
yield chr(c)
355+
assert d1.keys() & chargen('a', 'b') == {'a', 'b'}
356+
357+
assert_raises(TypeError, lambda: d1.keys() & 1)
358+
class TC:
359+
pass
360+
assert_raises(TypeError, lambda: d1.keys() & TC())
361+
362+
# |
363+
assert d1.keys() | 'b' == {'a', 'b'}
364+
assert d1.keys() | 'bc' == {'a', 'c', 'b'}
365+
assert d1.keys() | ['a'] == {'a', 'b'}
366+
assert d1.keys() | ['a', 'b'] == {'a', 'b'}
367+
assert d1.keys() | ['c', 'b'] == {'a', 'c', 'b'}
368+
assert d1.keys() | [1, 2] == {'a', 1, 2, 'b'}
369+
assert d1.keys() | ('a') == {'a', 'b'}
370+
assert d1.keys() | ('a', 'b') == {'a', 'b'}
371+
assert d1.keys() | {('a', 1)} == {'a', ('a', 1), 'b'}
372+
assert d1.keys() | d1 == {'a', 'b'}
373+
assert d1.keys() | d1.values() == {'a', 1, 2, 'b'}
374+
assert d1.keys() | {1:'a', 2:'b'}.values() == {'a', 'b'}
375+
assert {1:1, 2:2}.keys() | range(1,3) == {1, 2}
376+
377+
assert d1.keys() | chargen('a', 'c') == {'a', 'b', 'c'}
378+
379+
assert_raises(TypeError, lambda: d1.keys() | 1)
380+
assert_raises(TypeError, lambda: d1.keys() | TC())
381+
382+
# ^
383+
assert d1.keys() ^ 'a' == {'b'}
384+
assert d1.keys() ^ "ab" == set()
385+
assert d1.keys() ^ ['a'] == {'b'}
386+
assert d1.keys() ^ ['a', 'b'] == set()
387+
assert d1.keys() ^ [1, 2] == {'a', 1, 2, 'b'}
388+
assert d1.keys() ^ ('a') == {'b'}
389+
assert d1.keys() ^ ('a', 'b') == set()
390+
assert d1.keys() ^ {('a', 1)} == {'a', ('a', 1), 'b'}
391+
assert d1.keys() ^ d1 == set()
392+
assert d1.keys() ^ d1.values() == {'a', 1, 2, 'b'}
393+
assert d1.keys() ^ {1:'a', 2:'b'}.values() == set()
394+
assert {1:1, 2:2}.keys() ^ range(1,3) == set()
395+
396+
assert d1.keys() ^ chargen('b', 'c') == {'a', 'c'}
397+
398+
assert_raises(TypeError, lambda: d1.keys() ^ 1)
399+
assert_raises(TypeError, lambda: d1.keys() ^ TC())
400+
401+
# -
402+
assert d1.keys() - 'a' == {'b'}
403+
assert d1.keys() - "ab" == set()
404+
assert d1.keys() - ['a'] == {'b'}
405+
assert d1.keys() - ['a', 'b'] == set()
406+
assert d1.keys() - [1, 2] == {'a', 'b'}
407+
assert d1.keys() - ('a') == {'b'}
408+
assert d1.keys() - ('a', 'b') == set()
409+
assert d1.keys() - {('a', 1)} == {'a', 'b'}
410+
assert d1.keys() - d1 == set()
411+
assert d1.keys() - d1.values() == {'a', 'b'}
412+
assert d1.keys() - {1:'a', 2:'b'}.values() == set()
413+
assert {1:1, 2:2}.keys() - range(1,3) == set()
414+
415+
assert d1.keys() - chargen('b', 'c') == {'a'}
416+
417+
assert_raises(TypeError, lambda: d1.keys() - 1)
418+
assert_raises(TypeError, lambda: d1.keys() - TC())
419+
420+
def test_dictview_items_operations():
421+
d1 = {'a': 1, 'b': 2}
422+
423+
# &
424+
assert d1.items() & 'b' == set()
425+
assert d1.items() & "ab" == set()
426+
assert d1.items() & ['a'] == set()
427+
assert d1.items() & ['a', 'b'] == set()
428+
assert d1.items() & [1, 2] == set()
429+
assert d1.items() & ('a') == set()
430+
assert d1.items() & ('a', 'b') == set()
431+
assert d1.items() & {('a', 1)} == {('a', 1)}
432+
assert d1.items() & d1 == set()
433+
assert d1.items() & d1.values() == set()
434+
assert d1.items() & {1:'a', 2:'b'}.values() == set()
435+
assert d1.items() & tuple(d1.items()) == {('a', 1), ('b', 2)}
436+
assert d1.items() & tuple(('a', 1)) == set()
437+
assert {1:1, 2:2}.items() & range(1,3) == set()
438+
439+
def tuplegen(i, c1, c2):
440+
for c in range(ord(c1), ord(c2)+1):
441+
i += 1
442+
yield (chr(c), i)
443+
444+
assert d1.items() & tuplegen(0, 'a', 'b') == {('a', 1), ('b', 2)}
445+
446+
assert_raises(TypeError, lambda: d1.items() & 1)
447+
class TC:
448+
pass
449+
assert_raises(TypeError, lambda: d1.items() & TC())
450+
451+
# |
452+
assert d1.items() | 'b' == {('a', 1), ('b', 2), 'b'}
453+
assert d1.items() | "ab" == {('a', 1), ('b', 2), 'a', 'b'}
454+
assert d1.items() | ['a'] == {('a', 1), ('b', 2), 'a'}
455+
assert d1.items() | ['a', 'b'] == {('a', 1), ('b', 2), 'a', 'b'}
456+
assert d1.items() | [1, 2] == {('a', 1), ('b', 2), 1, 2}
457+
assert d1.items() | ('a') == {('a', 1), ('b', 2), 'a'}
458+
assert d1.items() | ('a', 'b') == {('a', 1), ('b', 2), 'a', 'b'}
459+
assert d1.items() | {('a', 1)} == {('a', 1), ('b', 2)}
460+
assert d1.items() | d1 == {('a', 1), ('b', 2), 'a', 'b'}
461+
assert d1.items() | d1.values() == {('a', 1), ('b', 2), 1, 2}
462+
assert d1.items() | {1:'a', 2:'b'}.values() == {('a', 1), ('b', 2), 'a', 'b'}
463+
assert d1.items() | tuple(d1.items()) == {('a', 1), ('b', 2)}
464+
assert d1.items() | tuple(('a', 1)) == {('a', 1), ('b', 2), 'a', 1}
465+
assert {1:1, 2:2}.items() | range(1,3) == {1, 2, (1, 1), (2, 2)}
466+
467+
assert d1.items() | tuplegen(0, 'a', 'c') == {('a', 1), ('b', 2), ('c', 3)}
468+
469+
assert_raises(TypeError, lambda: d1.items() | 1)
470+
assert_raises(TypeError, lambda: d1.items() | TC())
471+
472+
# ^
473+
assert d1.items() ^ 'a' == {('a', 1), 'a', ('b', 2)}
474+
assert d1.items() ^ "ab" == {('a', 1), 'a', ('b', 2), 'b'}
475+
assert d1.items() ^ ['a'] == {('a', 1), 'a', ('b', 2)}
476+
assert d1.items() ^ ['a', 'b'] == {('a', 1), 'a', ('b', 2), 'b'}
477+
assert d1.items() ^ [1, 2] == {('a', 1), 1, 2, ('b', 2)}
478+
assert d1.items() ^ ('a') == {('a', 1), 'a', ('b', 2)}
479+
assert d1.items() ^ ('a', 'b') == {('a', 1), 'a', ('b', 2), 'b'}
480+
assert d1.items() ^ {('a', 1)} == {('b', 2)}
481+
assert d1.items() ^ d1 == {('a', 1), 'a', ('b', 2), 'b'}
482+
assert d1.items() ^ d1.values() == {('a', 1), 1, 2, ('b', 2)}
483+
assert d1.items() ^ {1:'a', 2:'b'}.values() == {('a', 1), 'a', ('b', 2), 'b'}
484+
assert {1:1, 2:2}.items() ^ range(1,3) == {1, 2, (1, 1), (2, 2)}
485+
486+
assert d1.items() ^ tuplegen(1, 'b', 'c') == {('a', 1), ('c', 3)}
487+
488+
assert_raises(TypeError, lambda: d1.items() ^ 1)
489+
assert_raises(TypeError, lambda: d1.items() ^ TC())
490+
491+
# -
492+
assert d1.items() - 'a' == {('a', 1), ('b', 2)}
493+
assert d1.items() - "ab" == {('a', 1), ('b', 2)}
494+
assert d1.items() - ['a'] == {('a', 1), ('b', 2)}
495+
assert d1.items() - ['a', 'b'] == {('a', 1), ('b', 2)}
496+
assert d1.items() - [1, 2] == {('a', 1), ('b', 2)}
497+
assert d1.items() - ('a') == {('a', 1), ('b', 2)}
498+
assert d1.items() - ('a', 'b') == {('a', 1), ('b', 2)}
499+
assert d1.items() - {('a', 1)} == {('b', 2)}
500+
assert d1.items() - d1 == {('a', 1), ('b', 2)}
501+
assert d1.items() - d1.values() == {('a', 1), ('b', 2)}
502+
assert d1.items() - {1:'a', 2:'b'}.values() == {('a', 1), ('b', 2)}
503+
assert {1:1, 2:2}.items() - range(1,3) == {(1, 1), (2, 2)}
504+
505+
assert d1.items() - tuplegen(1, 'b', 'c') == {('a', 1)}
506+
507+
assert_raises(TypeError, lambda: d1.items() - 1)
508+
assert_raises(TypeError, lambda: d1.items() - TC())
335509

336510
def test_dictview_set_operations_on_items():
337511
k1 = {1: 1, 2: 2}.items()

graalpython/com.oracle.graal.python.test/src/tests/unittest_tags/test_dictviews.txt

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,3 +2,11 @@
22
*DictSetTest.test_compare_error
33
*DictSetTest.test_constructors_not_callable
44
*DictSetTest.test_copy
5+
*DictSetTest.test_dict_items
6+
*DictSetTest.test_dict_keys
7+
*DictSetTest.test_dict_mixed_keys_items
8+
*DictSetTest.test_dict_repr
9+
*DictSetTest.test_dict_values
10+
*DictSetTest.test_items_set_operations
11+
*DictSetTest.test_keys_set_operations
12+
*DictSetTest.test_pickle

0 commit comments

Comments
 (0)