# 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 :func:`bidict.namedbidict`:: >>> from bidict import namedbidict >>> ElementMap = namedbidict('ElementMap', 'symbol', 'name') >>> noble_gases = ElementMap(He='helium') >>> noble_gases.name_for['He'] 'helium' >>> noble_gases.symbol_for['helium'] 'He' >>> noble_gases.name_for['Ne'] = 'neon' >>> del noble_gases.symbol_for['helium'] >>> noble_gases ElementMap({'Ne': 'neon'}) ``.inv`` still works too:: >>> noble_gases.inv ElementMap({'neon': 'Ne'}) >>> noble_gases.inv.name_for['Ne'] 'neon' >>> noble_gases.inv.symbol_for['neon'] 'Ne' Pickling works:: >>> from pickle import dumps, loads >>> loads(dumps(noble_gases)) == noble_gases True Invalid names are rejected:: >>> invalid = namedbidict('0xabad1d3a', 'keys', 'vals') Traceback (most recent call last): ... ValueError: "0xabad1d3a" does not match pattern ^[a-zA-Z][a-zA-Z0-9_]*$ Comparison works as expected:: >>> from bidict import bidict >>> noble_gases2 = ElementMap({'Ne': 'neon'}) >>> noble_gases2 == noble_gases True >>> noble_gases2 == bidict(noble_gases) True >>> noble_gases2 == dict(noble_gases) True >>> noble_gases2['Rn'] = 'radon' >>> noble_gases2 == noble_gases False >>> noble_gases2 != noble_gases True >>> noble_gases2 != bidict(noble_gases) True >>> noble_gases2 != dict(noble_gases) True Test ``base_type`` keyword arg:: >>> from bidict import frozenbidict >>> ElMap = namedbidict('ElMap', 'sym', 'el', base_type=frozenbidict) >>> noble = ElMap(He='helium') >>> hash(noble) is not 'an exception' True >>> noble['C'] = 'carbon' Traceback (most recent call last): ... TypeError...