@@ -364,6 +364,7 @@ def test_multiply() -> None:
364364 assert l1 == [1, 1, 1]
365365
366366[case testOperatorInExpression]
367+ from typing import Final
367368
368369def tuple_in_int0(i: int) -> bool:
369370 return i in []
@@ -416,71 +417,128 @@ def list_not_in_str(s: "str") -> bool:
416417def list_in_mixed(i: object):
417418 return i in [[], (), "", 0, 0.0, False, 0j, {}, set(), type]
418419
419- [file driver.py]
420-
421- from native import *
422-
423- assert not tuple_in_int0(0)
424- assert not tuple_in_int1(0)
425- assert tuple_in_int1(1)
426- assert not tuple_in_int3(0)
427- assert tuple_in_int3(1)
428- assert tuple_in_int3(2)
429- assert tuple_in_int3(3)
430- assert not tuple_in_int3(4)
431-
432- assert tuple_not_in_int0(0)
433- assert tuple_not_in_int1(0)
434- assert not tuple_not_in_int1(1)
435- assert tuple_not_in_int3(0)
436- assert not tuple_not_in_int3(1)
437- assert not tuple_not_in_int3(2)
438- assert not tuple_not_in_int3(3)
439- assert tuple_not_in_int3(4)
440-
441- assert tuple_in_str("foo")
442- assert tuple_in_str("bar")
443- assert tuple_in_str("baz")
444- assert not tuple_in_str("apple")
445- assert not tuple_in_str("pie")
446- assert not tuple_in_str("\0")
447- assert not tuple_in_str("")
448-
449- assert not list_in_int0(0)
450- assert not list_in_int1(0)
451- assert list_in_int1(1)
452- assert not list_in_int3(0)
453- assert list_in_int3(1)
454- assert list_in_int3(2)
455- assert list_in_int3(3)
456- assert not list_in_int3(4)
457-
458- assert list_not_in_int0(0)
459- assert list_not_in_int1(0)
460- assert not list_not_in_int1(1)
461- assert list_not_in_int3(0)
462- assert not list_not_in_int3(1)
463- assert not list_not_in_int3(2)
464- assert not list_not_in_int3(3)
465- assert list_not_in_int3(4)
466-
467- assert list_in_str("foo")
468- assert list_in_str("bar")
469- assert list_in_str("baz")
470- assert not list_in_str("apple")
471- assert not list_in_str("pie")
472- assert not list_in_str("\0")
473- assert not list_in_str("")
474-
475- assert list_in_mixed(0)
476- assert list_in_mixed([])
477- assert list_in_mixed({})
478- assert list_in_mixed(())
479- assert list_in_mixed(False)
480- assert list_in_mixed(0.0)
481- assert not list_in_mixed([1])
482- assert not list_in_mixed(object)
483- assert list_in_mixed(type)
420+ def test_in_operator_various_cases() -> None:
421+ assert not tuple_in_int0(0)
422+ assert not tuple_in_int1(0)
423+ assert tuple_in_int1(1)
424+ assert not tuple_in_int3(0)
425+ assert tuple_in_int3(1)
426+ assert tuple_in_int3(2)
427+ assert tuple_in_int3(3)
428+ assert not tuple_in_int3(4)
429+
430+ assert tuple_not_in_int0(0)
431+ assert tuple_not_in_int1(0)
432+ assert not tuple_not_in_int1(1)
433+ assert tuple_not_in_int3(0)
434+ assert not tuple_not_in_int3(1)
435+ assert not tuple_not_in_int3(2)
436+ assert not tuple_not_in_int3(3)
437+ assert tuple_not_in_int3(4)
438+
439+ assert tuple_in_str("foo")
440+ assert tuple_in_str("bar")
441+ assert tuple_in_str("baz")
442+ assert not tuple_in_str("apple")
443+ assert not tuple_in_str("pie")
444+ assert not tuple_in_str("\0")
445+ assert not tuple_in_str("")
446+
447+ assert not list_in_int0(0)
448+ assert not list_in_int1(0)
449+ assert list_in_int1(1)
450+ assert not list_in_int3(0)
451+ assert list_in_int3(1)
452+ assert list_in_int3(2)
453+ assert list_in_int3(3)
454+ assert not list_in_int3(4)
455+
456+ assert list_not_in_int0(0)
457+ assert list_not_in_int1(0)
458+ assert not list_not_in_int1(1)
459+ assert list_not_in_int3(0)
460+ assert not list_not_in_int3(1)
461+ assert not list_not_in_int3(2)
462+ assert not list_not_in_int3(3)
463+ assert list_not_in_int3(4)
464+
465+ assert list_in_str("foo")
466+ assert list_in_str("bar")
467+ assert list_in_str("baz")
468+ assert not list_in_str("apple")
469+ assert not list_in_str("pie")
470+ assert not list_in_str("\0")
471+ assert not list_in_str("")
472+
473+ assert list_in_mixed(0)
474+ assert list_in_mixed([])
475+ assert list_in_mixed({})
476+ assert list_in_mixed(())
477+ assert list_in_mixed(False)
478+ assert list_in_mixed(0.0)
479+ assert not list_in_mixed([1])
480+ assert not list_in_mixed(object)
481+ assert list_in_mixed(type)
482+
483+ TUP2: Final = ('x', 'y')
484+ TUP1: Final = ('x',)
485+ TUP0: Final = ()
486+
487+ def test_final_tuple_in() -> None:
488+ assert 'x' + str() in TUP2
489+ assert 'y' + str() in TUP2
490+ b: object = 'z' + str() in TUP2
491+ assert not b
492+
493+ assert 'x' + str() in TUP1
494+ b2: object = 'y' in TUP1
495+ assert not b2
496+
497+ b3: object = 'x' in TUP0
498+ assert not b3
499+
500+ def test_final_tuple_not_in() -> None:
501+ assert 'z' + str() not in TUP2
502+ b: object = 'x' + str() not in TUP2
503+ assert not b
504+ b2: object = 'y' + str() not in TUP2
505+ assert not b2
506+
507+ assert 'y' + str() not in TUP1
508+ b3: object = 'x' not in TUP1
509+ assert not b2
510+
511+ assert 'x' not in TUP0
512+
513+ log = []
514+
515+ def f_a() -> str:
516+ log.append('f_a')
517+ return 'a'
518+
519+ def f_a2() -> str:
520+ log.append('f_a2')
521+ return 'a'
522+
523+ def f_b() -> str:
524+ log.append('f_b')
525+ return 'b'
526+
527+ def f_c() -> str:
528+ log.append('f_c')
529+ return 'c'
530+
531+ def test_tuple_in_order_of_evaluation() -> None:
532+ assert f_a() in (f_b(), f_a2())
533+ assert log ==["f_a", "f_b", "f_a2"]
534+
535+ log.clear()
536+ assert f_a() not in (f_b(), f_c())
537+ assert log ==["f_a", "f_b", "f_c"]
538+
539+ log.clear()
540+ assert f_a() in (f_b(), f_a2(), f_c())
541+ assert log ==["f_a", "f_b", "f_a2", "f_c"]
484542
485543[case testListBuiltFromGenerator]
486544def test_from_gen() -> None:
0 commit comments