示例#1
0
文件: test.py 项目: Dieterbe/disco
class TestQuery(unittest.TestCase):
    def setUp(self):
        self.discodb = DiscoDB(
            (('alice', ('blue',)),
            ('bob', ('red',)),
            ('carol', ('blue', 'red'))),
        )

    def q(self, s):
        return self.discodb.query(Q.parse(s))

    def test_empty(self):
        self.assertEqual(list(self.q('')), [])
        self.assertEqual(len(self.q('')), 0)

    def test_get_len(self):
        self.assertEqual(len(self.discodb.get('alice')), 1)
        self.assertEquals(len(self.discodb.get('bob')), 1)
        self.assertEquals(len(self.discodb.get('carol')), 2)

    def test_query_len(self):
        self.assertEquals(len(self.q('alice')), 1)
        self.assertEquals(len(self.q('bob')), 1)
        self.assertEquals(len(self.q('carol')), 2)
        self.assertEquals(len(self.q('alice & bob')), 0)
        self.assertEquals(len(self.q('alice | bob')), 2)
        self.assertEquals(len(self.q('alice & carol')), 1)
        self.assertEquals(len(self.q('alice | carol')), 2)
        self.assertEquals(len(self.q('alice|bob|carol')), 2)
        self.assertEquals(len(self.q('alice&bob&carol')), 0)

    def test_query_len_doesnt_advance_iter(self):
        # check that calling len() doesn't advance the iterator
        res = self.q('alice')
        self.assertEquals(len(res), 1)
        self.assertEquals(len(res), 1)

    def test_query_results(self):
        self.assertEquals(set(self.q('alice')), set(['blue']))
        self.assertEquals(set(self.q('bob')), set(['red']))
        self.assertEquals(set(self.q('carol')), set(['blue', 'red']))
        self.assertEquals(set(self.q('alice & bob')), set())
        self.assertEquals(set(self.q('alice | bob')), set(['blue', 'red']))
        self.assertEquals(set(self.q('alice & carol')), set(['blue']))
        self.assertEquals(set(self.q('alice | carol')), set(['blue', 'red']))
        self.assertEquals(set(self.q('alice|bob|carol')), set(['blue', 'red']))
        self.assertEquals(set(self.q('alice&bob&carol')), set())

    def test_query_len_nonkey(self):
        self.assertEquals(len(self.q('nonkey')), 0)
        self.assertEquals(len(self.q('~nonkey')), 2)
        self.assertEquals(len(self.q('nonkey & alice')), 0)
        self.assertEquals(len(self.q('nonkey | alice')), 1)

    def test_query_results_nonkey(self):
        self.assertEquals(set(self.q('nonkey')), set())
        self.assertEquals(set(self.q('~nonkey')), set(['blue', 'red']))
        self.assertEquals(set(self.q('nonkey & alice')), set())
        self.assertEquals(set(self.q('nonkey | alice')), set(['blue']))
示例#2
0
文件: test.py 项目: christofd/disco
class TestMappingProtocol(unittest.TestCase):
    numkeys = 1000

    def setUp(self):
        self.discodb = DiscoDB(k_vs_iter(self.numkeys))

    def test_contains(self):
        assert "0" in self.discodb
        assert "key" not in self.discodb

    def test_length(self):
        self.assertEquals(len(self.discodb), self.numkeys)

    def test_get(self):
        len(list(self.discodb.get('0')))
        self.assertEquals(self.discodb.get('X'), None)
        self.assertEquals(self.discodb.get('X', 'Y'), 'Y')

    def test_getitem(self):
        for x in xrange(self.numkeys):
            try:
                list(self.discodb[str(x)])
            except KeyError:
                self.assertEquals(x, self.numkeys)

    def test_iter(self):
        self.assertEquals(list(self.discodb), list(self.discodb.keys()))

    def test_items(self):
        for key, values in self.discodb.items():
            key, list(values)

    def test_keys(self):
        len(list(self.discodb.keys()))

    def test_values(self):
        len(list(self.discodb.values()))

    def test_unique_values(self):
        len(list(self.discodb.unique_values()))

    def test_peek(self):
        self.assertNotEquals(self.discodb.peek('0'), None)
        self.assertEquals(self.discodb.peek('X'), None)
        self.assert_(int(self.discodb.peek('0', '1')) >= 0)

    def test_query(self):
        q = Q.parse('5 & 10 & (15 | 30)')
        list(self.discodb.query(q))

    def test_str(self):
        repr(self.discodb)
        str(self.discodb)
示例#3
0
def test_leak():
    while True:
        d = DiscoDB(zip(letters, ['abc'] * 1000))
        t = len(d.query('a'))
        t = len(d['b'])
        t = 'd' in d
        t = d.dumps()
        t = DiscoDB.loads(t)
        t = d.dump(open('/tmp/discodb', 'w'))
        t = DiscoDB.load(open('/tmp/discodb'))
        for k in d.keys():
            for v in d.values():
                t = k == v
示例#4
0
文件: perf.py 项目: rch/discodb
def test_leak():
    while True:
        d = DiscoDB(zip(letters, ["abc"] * 1000))
        t = len(d.query("a"))
        t = len(d["b"])
        t = "d" in d
        t = d.dumps()
        t = DiscoDB.loads(t)
        t = d.dump(open("/tmp/discodb", "w"))
        t = DiscoDB.load(open("/tmp/discodb"))
        for k in d.keys():
            for v in d.values():
                t = k == v
示例#5
0
文件: perf.py 项目: Dieterbe/disco
def test_leak():
    while True:
        d = DiscoDB(zip(letters, ['abc'] * 1000))
        t = len(d.query('a'))
        t = len(d['b'])
        t = 'd' in d
        t = d.dumps()
        t = DiscoDB.loads(t)
        t = d.dump(open('/tmp/discodb', 'w'))
        t = DiscoDB.load(open('/tmp/discodb'))
        for k in d.keys():
            for v in d.values():
                t = k == v
示例#6
0
class TestMappingProtocol(unittest.TestCase):
    numkeys = 1000

    def setUp(self):
        self.discodb = DiscoDB(k_vs_iter(self.numkeys))

    def test_contains(self):
        assert "200" in self.discodb
        assert "key" not in self.discodb

    def test_length(self):
        assert len(self.discodb) == self.numkeys

    def test_getitem(self):
        for x in xrange(self.numkeys):
            try:
                list(self.discodb[str(x)])
            except KeyError:
                assert x == self.numkeys

    def test_iter(self):
        assert list(self.discodb) == list(self.discodb.keys())

    def test_items(self):
        for key, values in self.discodb.items():
            key, list(values)

    def test_keys(self):
        len(list(self.discodb.keys()))

    def test_values(self):
        len(list(self.discodb.values()))

    def test_query(self):
        q = Q.parse('5 & 10 & (15 | 30)')
        list(self.discodb.query(q))

    def test_str(self):
        assert str(self.discodb) != repr(self.discodb)
示例#7
0
# could do multiple criteria of sub-relation:
# - tag co-occurence
# - label inheritance
# - subset of musical feature space




# * testing of discodb
data = {'mammals': ['cow', 'dog', 'cat', 'whale'],
        'pets': ['dog', 'cat', 'goldfish'],
        'aquatic': ['goldfish', 'whale']}

dbx = DiscoDB(data) # create an immutable discodb object
x = dbx.query(Q.parse('mammals & aquatic'))
[print(i) for i in x]

qry = Q.parse('mammals')

qry2 = Q.metaquery(dbx, 'mammals')

x = dbx.metaquery('pets', qry2)
dbx.

d = DiscoDB({'A': ['B', 'C'], 'B': 'D', 'C': 'E', 'D': 'F', 'E': 'G'})
sorted(d.query(Q.parse('A')))
sorted(d.query(Q.parse('B')))
sorted(d.query(Q.parse('*A')))
sorted(d.query(Q.parse('A | B')))
sorted(d.query(Q.parse('*A | B')))