/// <summary> /// Create a new key collection with some keys added/removed. This /// does not modify the current collection. /// </summary> /// <param name="toAdd">Keys to add.</param> /// <param name="toRemove">Keys to remove</param> /// <returns>A new key set with keys added/removed. If both add/remove /// key sets are empty, this returns the current instance.</returns> public Keys Alter(Keys toAdd, Keys toRemove) { if (toAdd.IsEmpty && toRemove.IsEmpty) { return this; } else { Keys keys = new Keys(this); keys.Add(toAdd); keys.remove(toRemove); return keys; } }
public void addRemoveSets() { Keys keys1 = new Keys(); Keys keys2 = new Keys(); Keys keys3 = new Keys(); keys1.Add(KeyScheme.Sha1Dual, DualKeyScheme.Subset.Producer, new Key("dual key prod 1")); keys1.Add(KeyScheme.Sha1Dual, DualKeyScheme.Subset.Consumer, new Key("dual key cons 1")); keys1.Add(KeyScheme.Sha1Producer, new Key("producer key 1.1")); keys1.Add(KeyScheme.Sha1Producer, new Key("producer key 1.2")); keys2.Add(KeyScheme.Sha1Dual, DualKeyScheme.Subset.Producer, new Key("dual key prod 2")); keys2.Add(KeyScheme.Sha1Dual, DualKeyScheme.Subset.Consumer, new Key("dual key cons 2")); keys2.Add(KeyScheme.Sha1Consumer, new Key("consumer key 1")); // add keys in bulk to keys3 keys3.Add(keys1); Assert.AreEqual(1, keys3.KeysetFor(KeyScheme.Sha1Dual).ConsumerKeys.Count); Assert.AreEqual(1, keys3.KeysetFor(KeyScheme.Sha1Dual).ProducerKeys.Count); Assert.AreEqual(2, keys3.KeysetFor(KeyScheme.Sha1Producer).Count); Assert.AreEqual(0, keys3.KeysetFor(KeyScheme.Sha1Consumer).Count); keys3.Add(keys2); Assert.AreEqual(2, keys3.KeysetFor(KeyScheme.Sha1Dual).ConsumerKeys.Count); Assert.AreEqual(2, keys3.KeysetFor(KeyScheme.Sha1Dual).ProducerKeys.Count); Assert.AreEqual(2, keys3.KeysetFor(KeyScheme.Sha1Producer).Count); Assert.AreEqual(1, keys3.KeysetFor(KeyScheme.Sha1Consumer).Count); keys3.remove(keys1); Assert.AreEqual(1, keys3.KeysetFor(KeyScheme.Sha1Dual).ConsumerKeys.Count); Assert.AreEqual(1, keys3.KeysetFor(KeyScheme.Sha1Dual).ProducerKeys.Count); Assert.AreEqual(0, keys3.KeysetFor(KeyScheme.Sha1Producer).Count); Assert.AreEqual(1, keys3.KeysetFor(KeyScheme.Sha1Consumer).Count); keys3.remove(keys2); Assert.IsTrue(keys3.IsEmpty); }