Test_IUniqueKeyedCollectionRSG_AsImplicitUniqueKeyedCollection() { Print( "Make an implicit collection out of an explicit one" ); IImplicitUniqueKeyedCollectionRSG< string, int > c = new SCG.Dictionary< string, int >() .AsHalfdecentCollection() .AsImplicitUniqueKeyedCollection( i => i.ToString() ); Print( "Add() an item and check" ); c.Add( 1 ); Assert( c.Count == 1 ); Assert( c.Contains( "1" ) ); Assert( c.Get( "1" ) == 1 ); Print( "Add() another item and check" ); c.Add( 2 ); Assert( c.Count == 2 ); Assert( c.Contains( "2" ) ); Assert( c.Get( "2" ) == 2 ); Print( "Remove() an item and check" ); c.Remove( "1" ); Assert( c.Count == 1 ); Assert( c.Contains( "2" ) ); Assert( c.Get( "2" ) == 2 ); Print( "Add() item with duplicate key throws RTypeException" ); Expect( e => RTypeException.Match< NonExistingKeyIn< string, int > >( e ), () => c.Add( 2 ) ); }
Test_CollectionFromSystemDictionaryAdapter() { Print( "Adapt a new dictionary" ); IUniqueKeyedCollectionRCSG< string, int > c = new SCG.Dictionary< string, int >() .AsHalfdecentCollection(); Print( "Check that it's empty" ); Assert( c.Count == 0 ); Print( ".Add() and check" ); c.Add( "1", 1 ); Assert( c.Count == 1 ); Assert( c.Contains( "1" ) ); Assert( c.Get( "1" ) == 1 ); Print( ".Add() and check" ); c.Add( "2", 2 ); Assert( c.Count == 2 ); Assert( c.Contains( "2" ) ); Assert( c.Get( "2" ) == 2 ); Print( ".Add() and check" ); c.Add( "3", 3 ); Assert( c.Count == 3 ); Assert( c.Contains( "3" ) ); Assert( c.Get( "3" ) == 3 ); Print( ".Replace() and check" ); c.Replace( "2", 22 ); Assert( c.Count == 3 ); Assert( c.Contains( "2" ) ); Assert( c.Get( "2" ) == 22 ); Print( ".Remove() and check" ); c.Remove( "2" ); Assert( c.Count == 2 ); Assert( !c.Contains( "2" ) ); Expect( e => RTypeException.Match( e, (vr,f) => vr.Equals( f.Down().Parameter( "key" ) ), rt => rt.Equals( new ExistingKeyIn< string, int >( c ) ) ), () => c.Get( "2" ) ); }