# Copyright 2018 Joshua Bronson. All Rights Reserved. # # This Source Code Form is subject to the terms of the Mozilla Public # License, v. 2.0. If a copy of the MPL was not distributed with this # file, You can obtain one at http://mozilla.org/MPL/2.0/. Test script for :class:`bidict.inverted`:: >>> from bidict import inverted >>> keys = (1, 2, 3) >>> vals = ('one', 'two', 'three') >>> fwd = dict(zip(keys, vals)) >>> inv = dict(inverted(fwd)) >>> inv == dict(zip(vals, keys)) True Works with a bidict:: >>> from bidict import bidict >>> b = bidict(fwd) >>> dict(inverted(b)) == inv == b.inv True Passing an iterable of pairs produces an iterable of the pairs' inverses:: >>> seq = [(1, 'one'), (2, 'two'), (3, 'three')] >>> list(inverted(seq)) [('one', 1), ('two', 2), ('three', 3)] Generators work too:: >>> list(inverted((i*i, i) for i in range(2, 5))) [(2, 4), (3, 9), (4, 16)] Passing an ``inverted`` object back into ``inverted`` produces the original sequence of pairs:: >>> seq == list(inverted(inverted(seq))) True Be careful with passing the inverse of a non-injective mapping into ``dict``:: >>> squares = {-2: 4, -1: 1, 0: 0, 1: 1, 2: 4} >>> len(squares) 5 >>> len(dict(inverted(squares))) 3