diff options
Diffstat (limited to 'tests/functional/u/use/use_implicit_booleaness_not_comparison.py')
-rw-r--r-- | tests/functional/u/use/use_implicit_booleaness_not_comparison.py | 142 |
1 files changed, 142 insertions, 0 deletions
diff --git a/tests/functional/u/use/use_implicit_booleaness_not_comparison.py b/tests/functional/u/use/use_implicit_booleaness_not_comparison.py new file mode 100644 index 000000000..18ca9c370 --- /dev/null +++ b/tests/functional/u/use/use_implicit_booleaness_not_comparison.py @@ -0,0 +1,142 @@ +# pylint: disable=missing-docstring, missing-module-docstring, invalid-name +# pylint: disable=too-few-public-methods, line-too-long, dangerous-default-value +# https://github.com/PyCQA/pylint/issues/4774 + +def github_issue_4774(): + # Test literals + # https://github.com/PyCQA/pylint/issues/4774 + good_list = [] + if not good_list: + pass + + bad_list = [] + if bad_list == []: # [use-implicit-booleaness-not-comparison] + pass + +# Testing for empty literals +empty_tuple = () +empty_list = [] +empty_dict = {} + +if empty_tuple == (): # [use-implicit-booleaness-not-comparison] + pass + +if empty_list == []: # [use-implicit-booleaness-not-comparison] + pass + +if empty_dict == {}: # [use-implicit-booleaness-not-comparison] + pass + +if () == empty_tuple: # [use-implicit-booleaness-not-comparison] + pass + +if [] == empty_list: # [use-implicit-booleaness-not-comparison] + pass + +if {} == empty_dict: # [use-implicit-booleaness-not-comparison] + pass + +def bad_tuple_return(): + t = (1, ) + return t == () # [use-implicit-booleaness-not-comparison] + +def bad_list_return(): + b = [1] + return b == [] # [use-implicit-booleaness-not-comparison] + +def bad_dict_return(): + c = {1: 1} + return c == {} # [use-implicit-booleaness-not-comparison] + +assert () == empty_tuple # [use-implicit-booleaness-not-comparison] +assert [] == empty_list # [use-implicit-booleaness-not-comparison] +assert {} != empty_dict # [use-implicit-booleaness-not-comparison] +assert () < empty_tuple # [use-implicit-booleaness-not-comparison] +assert [] <= empty_list # [use-implicit-booleaness-not-comparison] +assert () > empty_tuple # [use-implicit-booleaness-not-comparison] +assert [] >= empty_list # [use-implicit-booleaness-not-comparison] + +assert [] == [] +assert {} != {} +assert () == () + +d = {} + +if d in {}: + pass + +class NoBool: + def __init__(self): + self.a = 2 + +class YesBool: + def __init__(self): + self.a = True + + def __bool__(self): + return self.a + + +# Should be triggered +a = NoBool() +if [] == a: # [use-implicit-booleaness-not-comparison] + pass + +a = YesBool() +if a == []: + pass + +# compound test cases + +e = [] +f = {} + +if e == [] and f == {}: # [use-implicit-booleaness-not-comparison, use-implicit-booleaness-not-comparison] + pass + + +named_fields = [0, "", "42", "forty two"] +empty = any(field == "" for field in named_fields) + +something_else = NoBool() +empty_literals = [[], {}, ()] +is_empty = any(field == something_else for field in empty_literals) + +# this should work, but it doesn't since, input parameter only get the latest one, not all when inferred() +h, i, j = 1, None, [1,2,3] + +def test(k): + print(k == {}) + +def test_with_default(k={}): + print(k == {}) # [use-implicit-booleaness-not-comparison] + print(k == 1) + +test(h) +test(i) +test(j) + +test_with_default(h) +test_with_default(i) +test_with_default(j) + +# pylint: disable=import-outside-toplevel, wrong-import-position, import-error +# Numpy has its own implementation of __bool__, but base class has list, that's why the comparison check is happening +import numpy +numpy_array = numpy.array([0]) +if numpy_array == []: # [use-implicit-booleaness-not-comparison] + print('numpy_array') +if numpy_array != []: # [use-implicit-booleaness-not-comparison] + print('numpy_array') +if numpy_array >= (): # [use-implicit-booleaness-not-comparison] + print('b') + +# pandas has its own implementations of __bool__ and is not subclass of list, dict, or tuple; that's why comparison check is not happening +import pandas as pd +pandas_df = pd.DataFrame() +if pandas_df == []: + pass +if pandas_df != (): + pass +if pandas_df <= []: + print("truth value of a dataframe is ambiguous") |