def test_select_and_reject_do_not_modify_the_original_TheCount_instance(): c = TheCount() for _ in xrange(6): c.tally("apple") for _ in xrange(2): c.tally("banana") for _ in xrange(10): c.tally("carrot") for _ in xrange(3): c.tally(42) d = c.select(lambda k, v: v > 3) assert set(c.keys()) == set(["apple", "banana", "carrot", 42]) assert set(d.keys()) == set(["apple", "carrot"]) e = c.reject(lambda k, v: v > 3) assert set(c.keys()) == set(["apple", "banana", "carrot", 42]) assert set(e.keys()) == set(["banana", 42])
def test_tally_counts_stuff(): c = TheCount() assert set(c.keys()) == set() for _ in xrange(3): c.tally("foo") assert set(c.keys()) == set(["foo"]) assert c["foo"] == 3 for _ in xrange(2): c.tally(10, 2) assert set(c.keys()) == set(["foo", 10]) assert c["foo"] == 3 assert c[10] == 4 for _ in xrange(2): c.tally("foo") assert set(c.keys()) == set(["foo", 10]) assert c["foo"] == 5 assert c[10] == 4