diff options
Diffstat (limited to 'tests/functional/u/use/using_constant_test.py')
-rw-r--r-- | tests/functional/u/use/using_constant_test.py | 141 |
1 files changed, 141 insertions, 0 deletions
diff --git a/tests/functional/u/use/using_constant_test.py b/tests/functional/u/use/using_constant_test.py new file mode 100644 index 000000000..df7b56237 --- /dev/null +++ b/tests/functional/u/use/using_constant_test.py @@ -0,0 +1,141 @@ +"""Verify if constant tests are used inside if statements.""" +# pylint: disable=invalid-name, missing-docstring,too-few-public-methods +# pylint: disable=no-init,expression-not-assigned, useless-object-inheritance +# pylint: disable=missing-parentheses-for-call-in-test, unnecessary-comprehension, condition-evals-to-constant + + +import collections + + +def function(): + yield + + +class Class(object): + + def method(self): + pass + + +instance = Class() + +if collections: # [using-constant-test] + pass + +# GenExpr +if (node for node in range(10)): # [using-constant-test] + pass + +if lambda: None: # [using-constant-test] + pass + +if function: # [using-constant-test] + pass + +if Class: # [using-constant-test] + pass + +if 2: # [using-constant-test] + pass + +if True: # [using-constant-test] + pass + +if '': # [using-constant-test] + pass + +if b'': # [using-constant-test] + pass + +if 2.0: # [using-constant-test] + pass + +if {}: # [using-constant-test] + pass + +if {1, 2, 3}: # [using-constant-test] + pass + +if (1, 2, 3): # [using-constant-test] + pass + +if (): # [using-constant-test] + pass + +# Generator +generator = function() +if generator: # [using-constant-test] + pass + +if 1 if 2 else 3: # [using-constant-test] + pass + +def test_comprehensions(): + [data for data in range(100) if abs] # [using-constant-test] + [data for data in range(100) if 1] # [using-constant-test] + (data for data in range(100) if abs) # [using-constant-test] + (data for data in range(100) if 1) # [using-constant-test] + {data for data in range(100) if abs} # [using-constant-test] + {data: 1 for data in range(100) if abs} # [using-constant-test] + + +# UnboundMethod / Function +if Class.method: # [using-constant-test] + pass + +# BoundMethod +if instance.method: # [using-constant-test] + pass + +# For these, we require to do inference, even though the result can be a +# constant value. For some of them, we could determine that the test +# is constant, such as 2 + 3, but the components of the BinOp +# can be anything else (2 + somefunccall). + +name = 42 +if name: + pass + +if 3 + 4: + pass + +if 3 and 4: + pass + +if not 3: + pass + +if instance.method(): + pass + +# pylint: disable=misplaced-comparison-constant +if 2 < 3: + pass + +if tuple((1, 2, 3)): + pass + +if dict(): + pass + +if tuple(): + pass + +if [1, 2, 3][:1]: + pass + +def test(*args): + if args: + return 42 + return None + +def test_good_comprehension_checks(): + [data for data in range(100)] + [data for data in range(100) if data] + [data for data in range(100) if abs(data)] + (data for data in range(100) if data) + (data for data in range(100) if abs(data)) + {data for data in range(100) if data} + {data for data in range(100) if abs(data)} + {data: 1 for data in range(100) if data} + {data: 1 for data in range(100)} |