123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757 |
- # -*- coding: utf-8 -*-
- '''test stuf'''
- from stuf.six import unittest
- class Base(object):
- @property
- def _makeone(self):
- return self._impone(test1='test1', test2='test2', test3=dict(e=1))
- def setUp(self):
- self.stuf = self._makeone
- def test__getattr__(self):
- self.assertEqual(self.stuf.test1, 'test1')
- self.assertEqual(self.stuf.test2, 'test2')
- self.assertEqual(self.stuf.test3.e, 1)
- def test__getitem__(self):
- self.assertEqual(self.stuf['test1'], 'test1')
- self.assertEqual(self.stuf['test2'], 'test2')
- self.assertEqual(self.stuf['test3']['e'], 1)
- def test_get(self):
- self.assertEqual(self.stuf.get('test1'), 'test1')
- self.assertEqual(self.stuf.get('test2'), 'test2')
- self.assertIsNone(self.stuf.get('test4'), 'test4')
- self.assertEqual(self.stuf.get('test3').get('e'), 1)
- self.assertIsNone(self.stuf.get('test3').get('r'))
- def test__setattr__(self):
- self.stuf.max = 3
- self.stuf.test1 = 'test1again'
- self.stuf.test2 = 'test2again'
- self.stuf.test3.e = 5
- self.assertEqual(self.stuf.max, 3)
- self.assertEqual(self.stuf.test1, 'test1again')
- self.assertEqual(self.stuf.test2, 'test2again')
- self.assertEqual(self.stuf.test3.e, 5)
- def test__setitem__(self):
- self.stuf['max'] = 3
- self.stuf['test1'] = 'test1again'
- self.stuf['test2'] = 'test2again'
- self.stuf['test3']['e'] = 5
- self.assertEqual(self.stuf['max'], 3)
- self.assertEqual(self.stuf['test1'], 'test1again')
- self.assertEqual(self.stuf['test2'], 'test2again')
- self.assertEqual(self.stuf['test3']['e'], 5)
- def test__delattr__(self):
- del self.stuf.test1
- del self.stuf.test2
- del self.stuf.test3.e
- self.assertEqual(len(self.stuf.test3), 0)
- del self.stuf.test3
- self.assertEqual(len(self.stuf), 0)
- def test__delitem__(self):
- del self.stuf['test1']
- del self.stuf['test2']
- del self.stuf['test3']['e']
- self.assertNotIn('e', self.stuf['test3'])
- self.assertEqual(len(self.stuf['test3']), 0)
- del self.stuf['test3']
- self.assertEqual(len(self.stuf), 0)
- self.assertNotIn('test1', self.stuf)
- self.assertNotIn('test2', self.stuf)
- self.assertNotIn('test3', self.stuf)
- def test__cmp__(self):
- tstuff = self._makeone
- self.assertEqual(self.stuf, tstuff)
- def test__len__(self):
- self.assertEqual(len(self.stuf), 3)
- self.assertEqual(len(self.stuf.test3), 1)
- def test_repr(self):
- from stuf.six import strings
- self.assertIsInstance(repr(self._makeone), strings)
- self.assertIsInstance(repr(self.stuf), strings)
- def test_items(self):
- slist = list(self.stuf.items())
- self.assertIn(('test1', 'test1'), slist)
- self.assertIn(('test2', 'test2'), slist)
- self.assertIn(('test3', {'e': 1}), slist)
- def test_iteritems(self):
- slist = list(self.stuf.iteritems())
- self.assertIn(('test1', 'test1'), slist)
- self.assertIn(('test2', 'test2'), slist)
- self.assertIn(('test3', {'e': 1}), slist)
- def test_iter(self):
- slist = list(self.stuf)
- slist2 = list(self.stuf.test3)
- self.assertIn('test1', slist)
- self.assertIn('test2', slist)
- self.assertIn('test3', slist)
- self.assertIn('e', slist2)
- def test_iterkeys(self):
- slist = list(self.stuf.iterkeys())
- slist2 = list(self.stuf.test3.iterkeys())
- self.assertIn('test1', slist)
- self.assertIn('test2', slist)
- self.assertIn('test3', slist)
- self.assertIn('e', slist2)
- def test_itervalues(self):
- slist = list(self.stuf.itervalues())
- slist2 = list(self.stuf.test3.itervalues())
- self.assertIn('test1', slist)
- self.assertIn('test2', slist)
- self.assertIn({'e': 1}, slist)
- self.assertIn(1, slist2)
- def test_values(self):
- slist1 = self.stuf.test3.values()
- slist2 = self.stuf.values()
- self.assertIn(1, slist1)
- self.assertIn('test1', slist2)
- self.assertIn('test2', slist2)
- self.assertIn({'e': 1}, slist2)
- def test_keys(self):
- slist1 = self.stuf.test3.keys()
- slist2 = self.stuf.keys()
- self.assertIn('e', slist1)
- self.assertIn('test1', slist2)
- self.assertIn('test2', slist2)
- self.assertIn('test3', slist2)
- def test_pickle(self):
- import pickle
- tstuf = self._makeone
- pkle = pickle.dumps(tstuf)
- nstuf = pickle.loads(pkle)
- self.assertIsInstance(nstuf, self._impone)
- self.assertEqual(tstuf, nstuf)
- def test_clear(self):
- self.stuf.test3.clear()
- self.assertEqual(len(self.stuf.test3), 0)
- self.stuf.clear()
- self.assertEqual(len(self.stuf), 0)
- def test_pop(self):
- self.assertEqual(self.stuf.test3.pop('e'), 1)
- self.assertEqual(self.stuf.pop('test1'), 'test1')
- self.assertEqual(self.stuf.pop('test2'), 'test2')
- self.assertEqual(self.stuf.pop('test3'), {})
- def test_copy(self):
- tstuf = self._makeone
- nstuf = tstuf.copy()
- self.assertIsInstance(nstuf, self._impone)
- self.assertIsInstance(tstuf, self._impone)
- self.assertEqual(tstuf, nstuf)
- def test_popitem(self):
- item = self.stuf.popitem()
- self.assertEqual(len(item) + len(self.stuf), 4, item)
- def test_setdefault(self):
- self.assertEqual(self.stuf.test3.setdefault('e', 8), 1)
- self.assertEqual(self.stuf.test3.setdefault('r', 8), 8)
- self.assertEqual(self.stuf.setdefault('test1', 8), 'test1')
- self.assertEqual(self.stuf.setdefault('pow', 8), 8)
- def test_update(self):
- tstuff = self._makeone
- tstuff['test1'] = 3
- tstuff['test2'] = 6
- tstuff['test3'] = dict(f=2)
- self.stuf.update(tstuff)
- self.assertEqual(self.stuf['test1'], 3, self.stuf.items())
- self.assertEqual(self.stuf['test2'], 6)
- self.assertEqual(self.stuf['test3'], dict(f=2), self.stuf)
- def test_nofile(self):
- import sys
- s = self._impone(a=sys.stdout, b=1)
- self.assertEqual(s.a, sys.stdout)
- t = self._impone(a=[sys.stdout], b=1)
- self.assertEqual(t.a, [sys.stdout])
- class TestStuf(Base, unittest.TestCase):
- @property
- def _impone(self):
- from stuf import stuf
- return stuf
- class TestDefaultStuf(Base, unittest.TestCase):
- @property
- def _impone(self):
- from stuf import defaultstuf
- return defaultstuf
- @property
- def _makeone(self):
- return self._impone(
- list, test1='test1', test2='test2', test3=dict(e=1)
- )
- def test__getattr__(self):
- self.assertEqual(self.stuf.test1, 'test1')
- self.assertEqual(self.stuf.test2, 'test2')
- self.assertEqual(self.stuf.test4, [])
- self.assertEqual(self.stuf.test3.e, 1)
- self.assertEqual(self.stuf.test3.f, [])
- def test__getitem__(self):
- self.assertEqual(self.stuf['test1'], 'test1')
- self.assertEqual(self.stuf['test2'], 'test2')
- self.assertEqual(self.stuf['test4'], [])
- self.assertEqual(self.stuf['test3']['e'], 1)
- self.assertEqual(self.stuf['test3']['f'], [])
- def test__delattr__(self):
- del self.stuf.test1
- del self.stuf.test2
- del self.stuf.test3.e
- self.assertEqual(len(self.stuf.test3), 0)
- del self.stuf.test3
- self.assertEqual(len(self.stuf), 0)
- self.assertEqual(self.stuf.test1, [])
- self.assertEqual(self.stuf.test2, [])
- self.assertEqual(self.stuf.test3, [])
- self.assertRaises(AttributeError, lambda: self.stuf.test3.e)
- def test__delitem__(self):
- del self.stuf['test1']
- del self.stuf['test2']
- del self.stuf['test3']['e']
- self.assertNotIn('e', self.stuf['test3'])
- self.assertEqual(len(self.stuf['test3']), 0)
- self.assertEqual(self.stuf['test3']['e'], [])
- del self.stuf['test3']
- self.assertEqual(len(self.stuf), 0)
- self.assertNotIn('test1', self.stuf)
- self.assertNotIn('test2', self.stuf)
- self.assertNotIn('test3', self.stuf)
- self.assertEqual(self.stuf['test1'], [])
- self.assertEqual(self.stuf['test2'], [])
- self.assertEqual(self.stuf['test3'], [])
- self.assertRaises(TypeError, lambda: self.stuf['test3']['e'])
- def test_clear(self):
- self.stuf.test3.clear()
- self.assertEqual(len(self.stuf.test3), 0)
- self.assertEqual(self.stuf['test3']['e'], [])
- self.stuf.clear()
- self.assertEqual(len(self.stuf), 0)
- self.assertEqual(self.stuf['test1'], [])
- self.assertEqual(self.stuf['test2'], [])
- self.assertEqual(self.stuf['test3'], [])
- def test_nofile(self):
- import sys
- s = self._impone(list, a=sys.stdout, b=1)
- self.assertEqual(s.a, sys.stdout)
- t = self._impone(list, a=[sys.stdout], b=1)
- self.assertEqual(t.a, [sys.stdout])
- class TestFixedStuf(Base, unittest.TestCase):
- @property
- def _impone(self):
- from stuf import fixedstuf
- return fixedstuf
- def test__setattr__(self):
- self.assertRaises(AttributeError, lambda: setattr(self.stuf, 'max', 3))
- self.stuf.test1 = 'test1again'
- self.stuf.test2 = 'test2again'
- self.stuf.test3.e = 5
- self.assertRaises(AttributeError, lambda: self.stuf.max)
- self.assertEqual(self.stuf.test1, 'test1again')
- self.assertEqual(self.stuf.test2, 'test2again')
- self.assertEqual(self.stuf.test3.e, 5)
- def test__setitem__(self):
- self.assertRaises(KeyError, lambda: self.stuf.__setitem__('max', 3))
- self.stuf['test1'] = 'test1again'
- self.stuf['test2'] = 'test2again'
- self.stuf['test3']['e'] = 5
- self.assertRaises(KeyError, lambda: self.stuf.__getitem__('max'))
- self.assertEqual(self.stuf['test1'], 'test1again')
- self.assertEqual(self.stuf['test2'], 'test2again')
- self.assertEqual(self.stuf['test3']['e'], 5)
- def test__delattr__(self):
- self.assertRaises(TypeError, lambda: delattr(self.stuf.test1))
- self.assertRaises(TypeError, lambda: delattr(self.stuf.test3.e))
- def test__delitem__(self):
- del self.stuf.test3['e']
- self.assertRaises(KeyError, lambda: self.stuf.test3['e'])
- del self.stuf['test1']
- self.assertRaises(KeyError, lambda: self.stuf['test1'])
- def test_clear(self):
- self.assertRaises(KeyError, lambda: self.stuf.__setitem__('max', 3))
- self.stuf.clear()
- self.stuf['test1'] = 'test1again'
- self.stuf['test3'] = 5
- def test_pop(self):
- self.assertRaises(AttributeError, lambda: self.stuf.test3.pop('e'))
- self.assertRaises(AttributeError, lambda: self.stuf.pop('test1'))
- def test_popitem(self):
- self.assertRaises(AttributeError, lambda: self.stuf.test3.popitem())
- self.assertRaises(AttributeError, lambda: self.stuf.popitem())
- def test_setdefault(self):
- self.assertEqual(self.stuf.test3.setdefault('e', 8), 1)
- self.assertRaises(KeyError, lambda: self.stuf.test3.setdefault('r', 8))
- self.assertEqual(self.stuf.setdefault('test1', 8), 'test1')
- self.assertRaises(KeyError, lambda: self.stuf.setdefault('pow', 8))
- class TestFrozenStuf(Base, unittest.TestCase):
- @property
- def _impone(self):
- from stuf import frozenstuf
- return frozenstuf
- def test__setattr__(self):
- self.assertRaises(AttributeError, setattr(self.stuf, 'max', 3))
- self.assertRaises(
- AttributeError, setattr(self.stuf, 'test1', 'test1again')
- )
- self.assertRaises(
- AttributeError, setattr(self.stuf.test3, 'e', 5)
- )
- def test__setitem__(self):
- self.assertRaises(
- AttributeError, lambda: self.stuf.__setitem__('max', 3)
- )
- self.assertRaises(
- AttributeError,
- lambda: self.stuf.__setitem__('test2', 'test2again'),
- )
- self.assertRaises(
- AttributeError, lambda: self.stuf.test3.__setitem__('e', 5)
- )
- def test__delattr__(self):
- self.assertRaises(TypeError, lambda: delattr(self.stuf.test1))
- self.assertRaises(TypeError, lambda: delattr(self.stuf.test3.e))
- def test__delitem__(self):
- self.assertRaises(
- AttributeError, lambda: self.stuf.__delitem__('test1'),
- )
- self.assertRaises(
- AttributeError, lambda: self.stuf.test3.__delitem__('test1'),
- )
- def test_clear(self):
- self.assertRaises(AttributeError, lambda: self.stuf.test3.clear())
- self.assertRaises(AttributeError, lambda: self.stuf.clear())
- def test_pop(self):
- self.assertRaises(AttributeError, lambda: self.stuf.test3.pop('e'))
- self.assertRaises(AttributeError, lambda: self.stuf.pop('test1'))
- def test_popitem(self):
- self.assertRaises(AttributeError, lambda: self.stuf.test3.popitem())
- self.assertRaises(AttributeError, lambda: self.stuf.popitem())
- def test_setdefault(self):
- self.assertRaises(
- AttributeError, lambda: self.stuf.test3.setdefault('e', 8)
- )
- self.assertRaises(
- AttributeError, lambda: self.stuf.test3.setdefault('r', 8)
- )
- self.assertRaises(
- AttributeError, lambda: self.stuf.setdefault('test1', 8)
- )
- self.assertRaises(
- AttributeError, lambda: self.stuf.setdefault('pow', 8)
- )
- def test_update(self):
- tstuff = self._makeone
- self.assertRaises(
- AttributeError, lambda: self.stuf.test3.update(tstuff),
- )
- self.assertRaises(AttributeError, lambda: self.stuf.update(tstuff))
- class TestOrderedStuf(Base, unittest.TestCase):
- @property
- def _impone(self):
- from stuf import orderedstuf
- return orderedstuf
- def test_reversed(self):
- slist = list(reversed(self.stuf))
- self.assertIn('test1', slist)
- self.assertIn('test2', slist)
- self.assertIn('test3', slist)
- def test_order(self):
- ostuf = self._impone([('a', 1), ('b', 2), ('c', 3), ('d', 4)])
- self.assertEqual(list(ostuf.items()), [('a', 1), ('b', 2), ('c', 3), ('d', 4)])
- def test_fromkeys(self):
- ostuf = self._impone.fromkeys(['a', 'b', 'c', 'd'], 1)
- self.assertEqual(list(ostuf.items()), [('a', 1), ('b', 1), ('c', 1), ('d', 1)])
- class TestChainStuf(Base, unittest.TestCase):
- @property
- def _impone(self):
- from stuf.core import chainstuf
- return chainstuf
- @property
- def _makeone(self):
- return self._impone(
- dict(test1='test1'), dict(test2='test2'), dict(test3=dict(e=1))
- )
- def test_nofile(self):
- import sys
- s = self._impone(dict(a=sys.stdout), dict(b=1))
- self.assertEqual(s.a, sys.stdout)
- t = self._impone(dict(a=[sys.stdout]), dict(b=1))
- self.assertEqual(t.a, [sys.stdout])
- def test_clear(self):
- self.stuf.clear()
- self.assertEqual(len(self.stuf), 2)
- def test_pop(self):
- self.assertEqual(self.stuf.test3.pop('e'), 1)
- self.assertEqual(self.stuf.pop('test1'), 'test1')
- self.assertRaises(KeyError, lambda: self.stuf.pop('test2'))
- self.assertRaises(KeyError, lambda: self.stuf.pop('test3'))
- def test__delattr__(self):
- del self.stuf.test1
- self.assertRaises(AttributeError, lambda: delattr(self.stuf, 'test2'))
- self.assertRaises(AttributeError, lambda: delattr(self.stuf, 'test3'))
- self.assertRaises(AttributeError, lambda: delattr(self.stuf, 'test4'))
- self.assertEqual(len(self.stuf), 2)
- self.assertRaises(AttributeError, lambda: self.stuf.test1)
- self.assertEqual(self.stuf.test2, 'test2')
- self.assertEqual(dict(e=1), self.stuf.test3)
- self.assertEqual(1, self.stuf.test3.e)
- def test__delitem__(self):
- from operator import delitem
- del self.stuf['test1']
- self.assertRaises(KeyError, lambda: delitem(self.stuf, 'test2'))
- self.assertRaises(KeyError, lambda: delitem(self.stuf, 'test3'))
- self.assertEqual(len(self.stuf), 2)
- self.assertNotIn('test1', self.stuf)
- self.assertIn('test2', self.stuf)
- self.assertIn('test3', self.stuf)
- def test_parents(self):
- stuffed = self.stuf.parents
- self.assertEquals(
- stuffed.maps, [dict(test2='test2'), dict(test3=dict(e=1))]
- )
- def test_new_child(self):
- from stuf.core import stuf
- stuffed = self.stuf.new_child()
- self.assertEquals(
- stuffed.maps,
- [stuf(), stuf([('test1', 'test1')]), stuf(test2='test2'),
- stuf(test3=stuf(e=1))],
- )
- class TestCounter(unittest.TestCase):
- @property
- def _impone(self):
- from stuf.core import countstuf
- return countstuf
- @property
- def _makeone(self):
- return self._impone(['test1', 'test2', 'test3'])
- def setUp(self):
- self.stuf = self._makeone
- def test__getattr__(self):
- self.assertEqual(self.stuf.test1, 1)
- self.assertEqual(self.stuf.test2, 1)
- self.assertEqual(self.stuf.test3, 1)
- def test__getitem__(self):
- self.assertEqual(self.stuf['test1'], 1)
- self.assertEqual(self.stuf['test2'], 1)
- self.assertEqual(self.stuf['test3'], 1)
- def test_get(self):
- self.assertEqual(self.stuf.get('test1'), 1)
- self.assertEqual(self.stuf.get('test2'), 1)
- self.assertIsNone(self.stuf.get('test4'), 1)
- self.assertEqual(self.stuf.get('test3'), 1)
- def test__setattr__(self):
- self.stuf.max = 3
- self.stuf.test1 = 'test1again'
- self.stuf.test2 = 'test2again'
- self.stuf.test3 = 5
- self.assertEqual(self.stuf.max, 3)
- self.assertEqual(self.stuf.test1, 'test1again')
- self.assertEqual(self.stuf.test2, 'test2again')
- self.assertEqual(self.stuf.test3, 5)
- def test__setitem__(self):
- self.stuf['max'] = 3
- self.stuf['test1'] = 'test1again'
- self.stuf['test2'] = 'test2again'
- self.stuf['test3'] = 5
- self.assertEqual(self.stuf['max'], 3)
- self.assertEqual(self.stuf['test1'], 'test1again')
- self.assertEqual(self.stuf['test2'], 'test2again')
- self.assertEqual(self.stuf['test3'], 5)
- def test__delattr__(self):
- del self.stuf.test1
- del self.stuf.test2
- del self.stuf.test3
- self.assertEqual(len(self.stuf), 0)
- def test__delitem__(self):
- del self.stuf['test1']
- del self.stuf['test2']
- del self.stuf['test3']
- self.assertEqual(len(self.stuf), 0)
- self.assertNotIn('test1', self.stuf)
- self.assertNotIn('test2', self.stuf)
- self.assertNotIn('test3', self.stuf)
- def test__cmp__(self):
- tstuff = self._makeone
- self.assertEqual(self.stuf, tstuff)
- def test__len__(self):
- self.assertEqual(len(self.stuf), 3)
- def test_repr(self):
- from stuf.six import strings
- self.assertIsInstance(repr(self._makeone), strings)
- self.assertIsInstance(repr(self.stuf), strings)
- def test_items(self):
- slist = list(self.stuf.items())
- self.assertIn(('test1', 1), slist)
- self.assertIn(('test2', 1), slist)
- self.assertIn(('test3', 1), slist)
- def test_iteritems(self):
- slist = list(self.stuf.iteritems())
- self.assertIn(('test1', 1), slist)
- self.assertIn(('test2', 1), slist)
- self.assertIn(('test3', 1), slist)
- def test_iter(self):
- slist = list(self.stuf)
- self.assertIn('test1', slist)
- self.assertIn('test2', slist)
- self.assertIn('test3', slist)
- def test_iterkeys(self):
- slist = list(self.stuf.iterkeys())
- self.assertIn('test1', slist)
- self.assertIn('test2', slist)
- self.assertIn('test3', slist)
- def test_itervalues(self):
- slist = list(self.stuf.itervalues())
- self.assertIn(1, slist)
- self.assertIn(1, slist)
- self.assertIn(1, slist)
- def test_values(self):
- slist2 = self.stuf.values()
- self.assertIn(1, slist2)
- self.assertIn(1, slist2)
- self.assertIn(1, slist2)
- def test_keys(self):
- slist2 = self.stuf.keys()
- self.assertIn('test1', slist2)
- self.assertIn('test2', slist2)
- self.assertIn('test3', slist2)
- def test_pickle(self):
- import pickle
- tstuf = self._makeone
- pkle = pickle.dumps(tstuf)
- nstuf = pickle.loads(pkle)
- self.assertIsInstance(nstuf, self._impone)
- self.assertEqual(tstuf, nstuf)
- def test_clear(self):
- self.stuf.clear()
- self.assertEqual(len(self.stuf), 0)
- def test_pop(self):
- self.assertEqual(self.stuf.pop('test1'), 1)
- self.assertEqual(self.stuf.pop('test2'), 1)
- self.assertEqual(self.stuf.pop('test3'), 1)
- def test_copy(self):
- tstuf = self._makeone
- nstuf = tstuf.copy()
- self.assertIsInstance(nstuf, self._impone)
- self.assertIsInstance(tstuf, self._impone)
- self.assertEqual(tstuf, nstuf)
- def test_popitem(self):
- item = self.stuf.popitem()
- self.assertEqual(len(item) + len(self.stuf), 4, item)
- def test_setdefault(self):
- self.assertEqual(self.stuf.setdefault('test1', 8), 1)
- self.assertEqual(self.stuf.setdefault('pow', 8), 8)
- def test_update(self):
- tstuff = self._makeone
- tstuff['test1'] = 3
- tstuff['test2'] = 6
- tstuff['test3'] = 2
- self.stuf.update(tstuff)
- self.assertEqual(self.stuf['test1'], 4)
- self.assertEqual(self.stuf['test2'], 7)
- self.assertEqual(self.stuf['test3'], 3)
- def test_basics(self):
- from stuf.utils import lrange
- c = self._impone('abcaba')
- self.assertEqual(c.most_common(), [('a', 3), ('b', 2), ('c', 1)])
- for i in lrange(5):
- self.assertEqual(
- c.most_common(i), [('a', 3), ('b', 2), ('c', 1)][:i]
- )
- self.assertEqual(''.join(sorted(c.elements())), 'aaabbc')
- c.a += 1 # increment an existing value
- c.b -= 2 # sub existing value to zero
- del c.c # remove an entry
- del c.c # make sure that del doesn't raise KeyError
- c.d -= 2 # sub from a missing value
- c.e = -5 # directly assign a missing value
- c.f += 4 # add to a missing value
- def test_copy_subclass(self):
- class MyCounter(self._impone):
- pass
- c = MyCounter('slartibartfast')
- d = c.copy()
- self.assertEqual(d, c)
- self.assertEqual(len(d), len(c))
- self.assertEqual(type(d), type(c))
- def test_invariant_for_the_in_operator(self):
- c = self._impone(a=10, b=-2, c=0)
- for elem in c:
- self.assertTrue(elem in c)
- self.assertIn(elem, c)
- def test_multiset_operations(self):
- from stuf.utils import lrange
- from random import randrange
- # Verify that adding a zero counter will strip zeros and negatives
- c = self._impone(a=10, b=-2, c=0) + self._impone()
- self.assertEqual(dict(c), dict(a=10))
- elements = 'abcd'
- for _ in lrange(1000):
- # test random pairs of multisets
- p = self._impone(
- dict((elem, randrange(-2, 4)) for elem in elements))
- p.update(e=1, f=-1, g=0)
- q = self._impone(
- dict((elem, randrange(-2, 4)) for elem in elements))
- q.update(h=1, i=-1, j=0)
- for counterop, numberop in [
- (self._impone.__add__, lambda x, y: max(0, x + y)),
- (self._impone.__sub__, lambda x, y: max(0, x - y)),
- (self._impone.__or__, lambda x, y: max(0, x, y)),
- (self._impone.__and__, lambda x, y: max(0, min(x, y))),
- ]:
- result = counterop(p, q)
- for x in elements:
- self.assertEqual(numberop(p[x], q[x]), result[x],
- (counterop, x, p, q))
- # verify that results exclude non-positive counts
- self.assertTrue(x > 0 for x in result.values())
- elements = 'abcdef'
- for _ in lrange(100):
- # verify that random multisets with no repeats are exactly like sets
- p = self._impone(
- dict((elem, randrange(0, 2)) for elem in elements))
- q = self._impone(
- dict((elem, randrange(0, 2)) for elem in elements))
- for counterop, setop in [
- (self._impone.__sub__, set.__sub__),
- (self._impone.__or__, set.__or__),
- (self._impone.__and__, set.__and__),
- ]:
- counter_result = counterop(p, q)
- set_result = setop(set(p.elements()), set(q.elements()))
- self.assertEqual(counter_result, dict.fromkeys(set_result, 1))
- def test_unary(self):
- c = self._impone(a=-5, b=0, c=5, d=10, e=15, g=40)
- self.assertEqual(dict(+c), dict(c=5, d=10, e=15, g=40))
- self.assertEqual(dict(-c), dict(a=5))
- def test_repr_nonsortable(self):
- c = self._impone(a=2, b=None)
- r = repr(c)
- self.assertEqual("countstuf(a=2, b=None)", r)
- def test_subtract(self):
- c = self._impone(a=-5, b=0, c=5, d=10, e=15, g=40)
- c.subtract(a=1, b=2, c=-3, d=10, e=20, f=30, h=-50)
- self.assertEqual(
- c, self._impone(a=-6, b=-2, c=8, d=0, e=-5, f=-30, g=40, h=50))
- c = self._impone(a=-5, b=0, c=5, d=10, e=15, g=40)
- c.subtract(self._impone(a=1, b=2, c=-3, d=10, e=20, f=30, h=-50))
- self.assertEqual(
- c, self._impone(a=-6, b=-2, c=8, d=0, e=-5, f=-30, g=40, h=50))
- c = self._impone('aaabbcd')
- c.subtract('aaaabbcce')
- self.assertEqual(c, self._impone(a=-1, b=0, c=-1, d=1, e=-1))
- if __name__ == '__main__':
- unittest.main()
|