/// <summary> /// Test whether two collections are equivalent /// </summary> /// <param name="actual"></param> /// <returns></returns> protected override bool doMatch(IEnumerable actual) { // This is just an optimization if (expected is ICollection && actual is ICollection) { if (((ICollection)actual).Count != ((ICollection)expected).Count) { return(false); } } CollectionTally tally = new CollectionTally(expected); return(tally.CanRemove(actual) && tally.AllCountsEqualTo(0)); }
/// <summary> /// Test whether two collections are equivalent /// </summary> /// <param name="actual"></param> /// <returns></returns> protected override bool doMatch(IEnumerable actual) { // This is just an optimization if( expected is ICollection && actual is ICollection ) if( ((ICollection)actual).Count != ((ICollection)expected).Count ) return false; CollectionTally tally = new CollectionTally( expected ); return tally.CanRemove( actual ) && tally.AllCountsEqualTo( 0 ); }