Esempio n. 1
0
 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)
Esempio n. 2
0
 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)
Esempio n. 3
0
    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)
Esempio n. 4
0
    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)))
Esempio n. 5
0
    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]])))