(self)
| 2146 | self.assertEqual(c.total(), 15) |
| 2147 | |
| 2148 | def test_order_preservation(self): |
| 2149 | # Input order dictates items() order |
| 2150 | self.assertEqual(list(Counter('abracadabra').items()), |
| 2151 | [('a', 5), ('b', 2), ('r', 2), ('c', 1), ('d', 1)]) |
| 2152 | # letters with same count: ^----------^ ^---------^ |
| 2153 | |
| 2154 | # Verify retention of order even when all counts are equal |
| 2155 | self.assertEqual(list(Counter('xyzpdqqdpzyx').items()), |
| 2156 | [('x', 2), ('y', 2), ('z', 2), ('p', 2), ('d', 2), ('q', 2)]) |
| 2157 | |
| 2158 | # Input order dictates elements() order |
| 2159 | self.assertEqual(list(Counter('abracadabra simsalabim').elements()), |
| 2160 | ['a', 'a', 'a', 'a', 'a', 'a', 'a', 'b', 'b', 'b','r', |
| 2161 | 'r', 'c', 'd', ' ', 's', 's', 'i', 'i', 'm', 'm', 'l']) |
| 2162 | |
| 2163 | # Math operations order first by the order encountered in the left |
| 2164 | # operand and then by the order encountered in the right operand. |
| 2165 | ps = 'aaabbcdddeefggghhijjjkkl' |
| 2166 | qs = 'abbcccdeefffhkkllllmmnno' |
| 2167 | order = {letter: i for i, letter in enumerate(dict.fromkeys(ps + qs))} |
| 2168 | def correctly_ordered(seq): |
| 2169 | 'Return true if the letters occur in the expected order' |
| 2170 | positions = [order[letter] for letter in seq] |
| 2171 | return positions == sorted(positions) |
| 2172 | |
| 2173 | p, q = Counter(ps), Counter(qs) |
| 2174 | self.assertTrue(correctly_ordered(+p)) |
| 2175 | self.assertTrue(correctly_ordered(-p)) |
| 2176 | self.assertTrue(correctly_ordered(p + q)) |
| 2177 | self.assertTrue(correctly_ordered(p - q)) |
| 2178 | self.assertTrue(correctly_ordered(p | q)) |
| 2179 | self.assertTrue(correctly_ordered(p & q)) |
| 2180 | |
| 2181 | p, q = Counter(ps), Counter(qs) |
| 2182 | p += q |
| 2183 | self.assertTrue(correctly_ordered(p)) |
| 2184 | |
| 2185 | p, q = Counter(ps), Counter(qs) |
| 2186 | p -= q |
| 2187 | self.assertTrue(correctly_ordered(p)) |
| 2188 | |
| 2189 | p, q = Counter(ps), Counter(qs) |
| 2190 | p |= q |
| 2191 | self.assertTrue(correctly_ordered(p)) |
| 2192 | |
| 2193 | p, q = Counter(ps), Counter(qs) |
| 2194 | p &= q |
| 2195 | self.assertTrue(correctly_ordered(p)) |
| 2196 | |
| 2197 | p, q = Counter(ps), Counter(qs) |
| 2198 | p.update(q) |
| 2199 | self.assertTrue(correctly_ordered(p)) |
| 2200 | |
| 2201 | p, q = Counter(ps), Counter(qs) |
| 2202 | p.subtract(q) |
| 2203 | self.assertTrue(correctly_ordered(p)) |
| 2204 | |
| 2205 | def test_update(self): |
nothing calls this directly
no test coverage detected