raubatz's picture
download
raw
12.6 kB
#import pytest
from src.basic_data_handling.set_nodes import (
SetAdd,
SetAll,
SetAny,
SetContains,
SetCreate,
SetCreateFromBoolean,
SetCreateFromFloat,
SetCreateFromInt,
SetCreateFromString,
SetDifference,
SetDiscard,
SetEnumerate,
SetIntersection,
SetIsDisjoint,
SetIsSubset,
SetIsSuperset,
SetLength,
SetPop,
SetPopRandom,
SetRemove,
SetSum,
SetSymmetricDifference,
SetToDataList,
SetToList,
SetUnion,
)
def test_set_create():
node = SetCreate()
# Testing with kwargs to simulate dynamic inputs
assert node.create_set(item_0=1, item_1=2, item_2=3, item_3="") == ({1, 2, 3},)
assert node.create_set(item_0="a", item_1="b", item_2="") == ({"a", "b"},)
assert node.create_set() == (set(),) # Empty set with no arguments
# Mixed types
assert node.create_set(item_0=1, item_1="b", item_2=True, item_3="") == ({1, "b", True},)
def test_set_create_from_int():
node = SetCreateFromInt()
assert node.create_set(item_0=1, item_1=2, item_2=3, item_3="") == ({1, 2, 3},)
assert node.create_set(item_0=5, item_1="") == ({5},) # Single item set
assert node.create_set(item_0=1, item_1=1, item_2="") == ({1},) # Duplicate items become single item
assert node.create_set() == (set(),) # Empty set with no arguments
def test_set_create_from_string():
node = SetCreateFromString()
result = node.create_set(item_0="apple", item_1="banana", item_2="")
assert isinstance(result[0], set)
assert result[0] == {"apple", "banana"}
# Duplicate strings
result = node.create_set(item_0="apple", item_1="apple", item_2="")
assert result[0] == {"apple"}
# Empty set
assert node.create_set() == (set(),)
def test_set_create_from_float():
node = SetCreateFromFloat()
assert node.create_set(item_0=1.5, item_1=2.5, item_2="") == ({1.5, 2.5},)
assert node.create_set(item_0=3.14, item_1="") == ({3.14},) # Single item set
assert node.create_set(item_0=1.0, item_1=1.0, item_2="") == ({1.0},) # Duplicate items
assert node.create_set() == (set(),) # Empty set with no arguments
def test_set_create_from_boolean():
node = SetCreateFromBoolean()
assert node.create_set(item_0=True, item_1=False, item_2="") == ({True, False},)
assert node.create_set(item_0=True, item_1=True, item_2="") == ({True},) # Duplicate booleans
assert node.create_set() == (set(),) # Empty set with no arguments
# Test conversion from non-boolean values
assert node.create_set(item_0=1, item_1=0, item_2="") == ({True, False},)
def test_set_add():
node = SetAdd()
assert node.add({1, 2}, 3) == ({1, 2, 3},)
assert node.add({1, 2}, 1) == ({1, 2},) # Adding an existing item
assert node.add(set(), "first") == ({"first"},) # Adding to empty set
assert node.add({1, 2}, "string") == ({1, 2, "string"},) # Adding different type
def test_set_remove():
node = SetRemove()
assert node.remove({1, 2, 3}, 2) == ({1, 3}, True) # Successful removal
assert node.remove({1, 2, 3}, 4) == ({1, 2, 3}, False) # Item not in set
assert node.remove({1}, 1) == (set(), True) # Removing the only element
assert node.remove(set(), 1) == (set(), False) # Removing from empty set
def test_set_discard():
node = SetDiscard()
assert node.discard({1, 2, 3}, 2) == ({1, 3},) # Successful removal
assert node.discard({1, 2, 3}, 4) == ({1, 2, 3},) # No error for missing item
assert node.discard({1}, 1) == (set(),) # Discarding the only element
assert node.discard(set(), 1) == (set(),) # Discarding from empty set
def test_set_pop():
node = SetPop()
input_set = {1, 2, 3}
result_set, removed_item = node.pop(input_set)
assert result_set != input_set # Arbitrary item removed
assert removed_item in input_set # Removed item was part of original set
assert len(result_set) == len(input_set) - 1 # One item was removed
assert removed_item not in result_set # Removed item is not in result set
empty_set = set()
assert node.pop(empty_set) == (set(), None) # Handle empty set
def test_set_pop_random():
node = SetPopRandom()
# Test with single item - must remove that item
single_item_set = {42}
result_set, removed_item = node.pop_random_element(single_item_set)
assert result_set == set() and removed_item == 42
# Test with multiple items - can't predict which one will be popped
# but we can check the result set size and that the popped item was from the original set
original_set = {1, 2, 3, 4}
result_set, removed_item = node.pop_random_element(original_set)
assert len(result_set) == len(original_set) - 1
assert removed_item in original_set
assert removed_item not in result_set
# Test with empty set
empty_set = set()
assert node.pop_random_element(empty_set) == (set(), None)
def test_set_union():
node = SetUnion()
assert node.union({1, 2}, {3, 4}) == ({1, 2, 3, 4},)
assert node.union({1}, {2}, {3}, {4}) == ({1, 2, 3, 4},)
assert node.union({1, 2}, set()) == ({1, 2},) # Union with empty set
assert node.union(set(), set()) == (set(),) # Union of empty sets
assert node.union({1, 2}, {2, 3}) == ({1, 2, 3},) # Overlapping sets
def test_set_intersection():
node = SetIntersection()
assert node.intersection({1, 2, 3}, {2, 3, 4}) == ({2, 3},)
assert node.intersection({1, 2, 3}, {4, 5}) == (set(),) # No common elements
assert node.intersection({1, 2, 3}, {2, 3}, {3, 4}) == ({3},) # Multiple sets
assert node.intersection({1, 2, 3}, {1, 2, 3}) == ({1, 2, 3},) # Identical sets
assert node.intersection(set(), {1, 2, 3}) == (set(),) # Empty set intersection
def test_set_difference():
node = SetDifference()
assert node.difference({1, 2, 3}, {2, 3, 4}) == ({1},)
assert node.difference({1, 2, 3}, {4, 5}) == ({1, 2, 3},) # Nothing to remove
assert node.difference({1, 2, 3}, {1, 2, 3}) == (set(),) # Identical sets
assert node.difference(set(), {1, 2, 3}) == (set(),) # Empty set difference
assert node.difference({1, 2, 3}, set()) == ({1, 2, 3},) # Difference with empty set
def test_set_symmetric_difference():
node = SetSymmetricDifference()
assert node.symmetric_difference({1, 2, 3}, {3, 4, 5}) == ({1, 2, 4, 5},)
assert node.symmetric_difference({1, 2, 3}, {1, 2, 3}) == (set(),) # No unique elements
assert node.symmetric_difference(set(), {1, 2, 3}) == ({1, 2, 3},) # Empty set symmetric difference
assert node.symmetric_difference({1, 2, 3}, set()) == ({1, 2, 3},) # Symmetric difference with empty set
def test_set_is_subset():
node = SetIsSubset()
assert node.is_subset({1, 2}, {1, 2, 3}) == (True,)
assert node.is_subset({1, 4}, {1, 2, 3}) == (False,)
assert node.is_subset(set(), {1, 2, 3}) == (True,) # Empty set is subset of all sets
assert node.is_subset({1, 2}, {1, 2}) == (True,) # Set is subset of itself
assert node.is_subset({1, 2, 3}, {1, 2}) == (False,) # Superset is not a subset
def test_set_is_superset():
node = SetIsSuperset()
assert node.is_superset({1, 2, 3}, {1, 2}) == (True,)
assert node.is_superset({1, 2}, {1, 2, 3}) == (False,)
assert node.is_superset(set(), set()) == (True,) # Empty set is a superset of itself
assert node.is_superset({1, 2}, {1, 2}) == (True,) # Set is superset of itself
assert node.is_superset({1, 2}, set()) == (True,) # Any set is superset of empty set
def test_set_is_disjoint():
node = SetIsDisjoint()
assert node.is_disjoint({1, 2}, {3, 4}) == (True,) # No common elements
assert node.is_disjoint({1, 2}, {2, 3}) == (False,) # Common element
assert node.is_disjoint(set(), {1, 2, 3}) == (True,) # Empty set is disjoint with any set
assert node.is_disjoint({1, 2}, set()) == (True,) # Empty set is disjoint with any set
assert node.is_disjoint(set(), set()) == (True,) # Empty sets are disjoint
def test_set_contains():
node = SetContains()
assert node.contains({1, 2, 3}, 2) == (True,)
assert node.contains({1, 2, 3}, 4) == (False,)
assert node.contains(set(), 1) == (False,) # Empty set contains nothing
assert node.contains({1, "string", True}, "string") == (True,) # Mixed type set
assert node.contains({1, "string", True}, False) == (False,) # Boolean check
def test_set_length():
node = SetLength()
assert node.length({1, 2, 3}) == (3,)
assert node.length(set()) == (0,) # Empty set
assert node.length({1, 1, 1, 1}) == (1,) # Set with duplicate values (only counts unique)
assert node.length({12, "string", True, 3.14}) == (4,) # Mixed types
def test_set_to_list():
node = SetToList()
result = node.convert({1, 2, 3})
assert isinstance(result, tuple)
assert isinstance(result[0], list)
assert sorted(result[0]) == [1, 2, 3] # Validate conversion to list
# Empty set
result = node.convert(set())
assert result[0] == []
# Mixed types
result = node.convert({1, "string", True})
assert set(result[0]) == {1, "string", True} # Can't check order, just content
def test_set_to_data_list():
node = SetToDataList()
result = node.convert({1, 2, 3})
assert isinstance(result, tuple)
assert isinstance(result[0], list)
assert sorted(result[0]) == [1, 2, 3] # Validate conversion to data list
# Empty set
result = node.convert(set())
assert result[0] == []
# Mixed types
result = node.convert({1, "string", True})
assert set(result[0]) == {1, "string", True} # Can't check order, just content
# Empty set
result = node.convert(set())
assert result[0] == []
# Mixed types
result = node.convert({1, "string", True})
assert set(result[0]) == {1, "string", True} # Can't check order, just content
def test_set_all():
node = SetAll()
# Test with all truthy values
assert node.check_all({1, True, "string", 3.14}) == (True,)
# Test with one falsy value
assert node.check_all({1, False, "string"}) == (False,)
# Test with all falsy values
assert node.check_all({False, 0, "", None}) == (False,)
# Test with empty set (should return True per Python's all() behavior)
assert node.check_all(set()) == (True,)
def test_set_any():
node = SetAny()
# Test with all truthy values
assert node.check_any({1, True, "string", 3.14}) == (True,)
# Test with one truthy value
assert node.check_any({0, False, "", 1}) == (True,)
# Test with all falsy values
assert node.check_any({False, 0, "", None}) == (False,)
# Test with empty set (should return False per Python's any() behavior)
assert node.check_any(set()) == (False,)
def test_set_enumerate():
node = SetEnumerate()
# Basic test with default start=0
result = node.enumerate_set({10, 20, 30})
assert isinstance(result, tuple)
assert isinstance(result[0], list)
# Convert to set of tuples for comparison (order may vary)
result_set = {tuple(item) for item in result[0]}
assert result_set == {(0, 10), (1, 20), (2, 30)}
# Test with custom start value
result = node.enumerate_set({10, 20, 30}, start=5)
result_set = {tuple(item) for item in result[0]}
assert result_set == {(5, 10), (6, 20), (7, 30)}
# Test with empty set
result = node.enumerate_set(set())
assert result[0] == []
# Test with mixed types
result = node.enumerate_set({1, "string", False})
assert len(result[0]) == 3
# Check format but not exact values due to arbitrary order
for item in result[0]:
assert isinstance(item, tuple)
assert len(item) == 2
assert isinstance(item[0], int)
def test_set_sum():
node = SetSum()
# Test with integer set
int_result, float_result = node.sum_set({1, 2, 3})
assert int_result == 6
assert float_result == 6.0
# Test with float set
int_result, float_result = node.sum_set({1.5, 2.5, 3.0})
assert int_result == 7.0
assert float_result == 7.0
# Test with mixed numeric types
int_result, float_result = node.sum_set({1, 2.5, 3})
assert int_result == 6.5
assert float_result == 6.5
# Test with custom start value
int_result, float_result = node.sum_set({1, 2, 3}, start=10)
assert int_result == 16
assert float_result == 16.0
# Test with empty set
int_result, float_result = node.sum_set(set(), start=5)
assert int_result == 5
assert float_result == 5.0

Xet Storage Details

Size:
12.6 kB
·
Xet hash:
c521ba664c337e7e315b32b0623ca3210d20927ccafe74a211103d3027896c26

Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.