def should_return_false_for_floats(): assert is_iterable(1.0) is False assert is_iterable(-1.0) is False assert is_iterable(0.0) is False assert is_iterable(float("NaN")) is False assert is_iterable(float("Inf")) is False assert is_iterable(float("-Inf")) is False
def should_return_false_for_decimals(): assert is_iterable(Decimal("1.0")) is False assert is_iterable(Decimal("-1.0")) is False assert is_iterable(Decimal("0.0")) is False assert is_iterable(Decimal("NaN")) is False assert is_iterable(Decimal("Inf")) is False assert is_iterable(Decimal("-Inf")) is False
def should_return_false_for_booleans(): assert is_iterable(True) is False assert is_iterable(False) is False
def should_return_true_for_frozen_lists(): assert is_iterable(FrozenList()) is True assert is_iterable(FrozenList([0, 1, 2])) is True assert is_iterable(FrozenList(["A", "B", "C"])) is True
def should_return_false_for_ints(): assert is_iterable(1) is False assert is_iterable(-1) is False assert is_iterable(0) is False
def should_return_false_for_frozen_dicts(): assert is_iterable(FrozenDict()) is False assert is_iterable(FrozenDict({"__iter__": True})) is False assert is_iterable(FrozenDict({0: "A", 1: "B", 2: "C"})) is False
def should_return_false_for_simple_objects(): assert is_iterable(object) is False assert is_iterable(object()) is False
def should_return_false_for_range_function(): assert is_iterable(range) is False
def should_return_false_for_generator_function(): assert is_iterable(count) is False
def should_return_true_for_values_view(): assert is_iterable({}.values()) is True assert is_iterable({0: "A", 1: "B", 2: "C"}.values()) is True
def should_return_true_for_ranges(): assert is_iterable(range(10)) is True
def should_return_true_for_arrays(): assert is_iterable(array("b")) is True assert is_iterable(array("b", [0, 1, 2])) is True assert is_iterable(array("i")) is True assert is_iterable(array("i", [0, 1, 2])) is True
def should_return_true_for_named_tuples(): named = namedtuple("named", "a b c") assert is_iterable(named(0, 1, 2)) is True
def should_return_true_for_tuples(): assert is_iterable(()) is True assert is_iterable((0, 1, 1)) is True assert is_iterable(("A", "B", "C")) is True
def should_return_true_for_sets(): assert is_iterable(set()) is True assert is_iterable({0, 1, 2}) is True assert is_iterable({"A", "B", "C"}) is True
def should_return_true_for_infinite_generators(): assert is_iterable(count()) is True
def should_return_false_for_dicts(): assert is_iterable({}) is False assert is_iterable({"__iter__": True}) is False assert is_iterable({0: "A", 1: "B", 2: "C"}) is False
def should_return_false_for_none_object(): assert is_iterable(None) is False
def should_return_false_for_default_dicts(): assert is_iterable(defaultdict(list)) is False
def should_return_false_for_byte_strings(): assert is_iterable(b"ABC") is False assert is_iterable(b"0") is False assert is_iterable(b"") is False
def should_return_false_for_invalid_iterator_object(): class NoIterator: __iter__ = None assert is_iterable(NoIterator) is False assert is_iterable(NoIterator()) is False
def should_return_true_for_lists(): assert is_iterable([]) is True assert is_iterable([0, 1, 2]) is True assert is_iterable(["A", "B", "C"]) is True