Code Coverage: (bc: block coverage)
Factory Method:
[PexFactoryMethod(typeof(DataStructures.Dictionary<int, int>))]public static Dictionary<int, int> CreateKeyValPair([PexAssumeNotNull]System.Collections.Generic.KeyValuePair<int,int>[] pairs){ PexAssume.IsTrue(pairs.Length < 11); PexAssume.TrueForAll(pairs, p => (p.Key > -11 && p.Key < 11) && (p.Value > -11 && p.Value < 11)); //DataStructures.Utility.Int32EqualityComparer comparer = new DataStructures.Utility.Int32EqualityComparer(); DataStructures.Dictionary<int, int> ret = new DataStructures.Dictionary<int, int>(pairs.Length+2);// DataStructure has big enough capacity for Commutativity Test for (int i = 0; i < pairs.Length; i++) { if (!ret.ContainsKey(pairs[i].Key)) ret.Add(pairs[i].Key, pairs[i].Value); } return ret;}
Equal Method:
public string ToStringForInt(){ string ret = "{"; foreach (KeyValuePair<TKey, TValue> pair in this) { ret += "( " + pair.Key.ToString() + ", " + pair.Value.ToString() + " )"; }}
public class DictionaryEqualityComparer : EqualityComparer<Dictionary<int, int>>{ public readonly IEqualityComparer<int> mkey_comparer; public readonly IEqualityComparer<int> mval_comparer; public DictionaryEqualityComparer() { //mkey_comparer = new Int32EqualityComparer(); //mval_comparer = new Int32EqualityComparer(); mkey_comparer = EqualityComparer<int>.Default; mval_comparer = EqualityComparer<int>.Default; } // using m_comparer to keep equals properties in tact; don't want to choose one of the comparers public override bool Equals(Dictionary<int, int> x, Dictionary<int, int> y) { // handle null cases first if (x == null) { return (y == null); } else if (y == null) { // set1 != null return false; } if (x.Count != y.Count) { return false; } foreach (KeyValuePair<int, int> p in x) { if ((!y.ContainsKey(p.Key) || ! mval_comparer.Equals(y[p.Key], p.Value))) { return false; } } return true; } public override int GetHashCode(Dictionary<int, int> obj) { int hashCode = 0; if (obj != null) { foreach (KeyValuePair<int, int> t in obj) { hashCode += hashCode ^ (mkey_comparer.GetHashCode(t.Key) ^ mval_comparer.GetHashCode(t.Value) &0x7FFFFFFF); } } // else returns hashcode of 0 for null hashsets return hashCode; } // Equals method for the comparer itself. public override bool Equals(object obj) { DictionaryEqualityComparer comparer = obj as DictionaryEqualityComparer; if (comparer == null) { return false; } return (mkey_comparer == comparer.mkey_comparer && mval_comparer == comparer.mval_comparer); } public override int GetHashCode() { return mkey_comparer.GetHashCode()^ mval_comparer.GetHashCode(); }}