def test_grouping_filter_parameter(self): g1 = Grouping(key=lambda e: "The Special One", filter=lambda e: "special" in e.uid) g2 = Nodes(key=lambda e: "A Subset", filter=lambda e: "subset" in e.uid) ES = es.EnergySystem(groupings=[g1, g2]) special = Entity(uid="special") subset = set(Entity(uid="subset: {}".format(i)) for i in range(10)) others = set(Entity(uid="other: {}".format(i)) for i in range(10)) eq_(ES.groups["The Special One"], special) eq_(ES.groups["A Subset"], subset)
def test_non_callable_group_keys(self): collect_everything = Nodes(key="everything") g1 = Grouping(key="The Special One", filter=lambda e: "special" in e.uid) g2 = Nodes(key="A Subset", filter=lambda e: "subset" in e.uid) ES = es.EnergySystem(groupings=[g1, g2, collect_everything]) special = Entity(uid="special") subset = set(Entity(uid="subset: {}".format(i)) for i in range(2)) others = set(Entity(uid="other: {}".format(i)) for i in range(2)) everything = subset.union(others) everything.add(special) eq_(ES.groups["The Special One"], special) eq_(ES.groups["A Subset"], subset) eq_(ES.groups["everything"], everything)
def test_that_None_is_not_a_valid_group(self): def by_uid(n): if "Not in 'Group'" in n.uid: return None else: return "Group" ES = es.EnergySystem(groupings=[by_uid]) ungrouped = [ Entity(uid="Not in 'Group': {}".format(i)) for i in range(10) ] grouped = [Entity(uid="In 'Group': {}".format(i)) for i in range(10)] ok_(None not in ES.groups) for g in ES.groups.values(): for e in ungrouped: if isinstance(g, Iterable) and not isinstance(g, str): ok_(e not in g) for e in grouped: if isinstance(g, Iterable) and not isinstance(g, str): ok_(e in g)
def test_proper_filtering(self): """ `Grouping.filter` should not be "all or nothing". There was a bug where, if `Grouping.filter` returned `False` only for some elements of `Grouping.value(e)`, those elements where actually retained. This test makes sure that the bug doesn't resurface again. """ g = Nodes(key="group", value=lambda _: set((1, 2, 3, 4)), filter=lambda x: x % 2 == 0) ES = es.EnergySystem(groupings=[g]) special = Entity(uid="object") eq_(ES.groups["group"], set((2, 4)))
def test_defining_multiple_groupings_with_one_function(self): def assign_to_multiple_groups_in_one_go(n): g1 = n.uid[-1] g2 = n.uid[0:3] return [g1, g2] ES = es.EnergySystem(groupings=[assign_to_multiple_groups_in_one_go]) entities = [ Entity(uid=("Foo: " if i % 2 == 0 else "Bar: ") + "{}".format(i) + ("A" if i < 5 else "B")) for i in range(10) ] for group in ["Foo", "Bar", "A", "B"]: eq_(len(ES.groups[group]), 5, ("\n Failed testing length of group '{}'." + "\n Expected: 5" + "\n Got : {}" + "\n Group : {}").format( group, len(ES.groups[group]), sorted([e.uid for e in ES.groups[group]])))