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