public void addRemove() { Keys keys = new Keys(); keys.Add(KeyScheme.Sha1Dual, DualKeyScheme.Subset.Producer, new Key("dual key 1")); keys.Add(KeyScheme.Sha1Dual, DualKeyScheme.Subset.Consumer, new Key("dual key 2")); keys.Add(KeyScheme.Sha1Producer, new Key("producer key 1")); keys.Add(KeyScheme.Sha1Consumer, new Key("consumer key 1")); DualKeySet dualKeys = keys.KeysetFor(KeyScheme.Sha1Dual); Assert.AreEqual(1, dualKeys.ConsumerKeys.Count); Assert.AreEqual(1, dualKeys.ProducerKeys.Count); keys.Add(KeyScheme.Sha1Dual, DualKeyScheme.Subset.Producer, new Key("dual key 3")); Assert.AreEqual(2, keys.KeysetFor(KeyScheme.Sha1Dual).ProducerKeys.Count); keys.Remove(KeyScheme.Sha1Dual, DualKeyScheme.Subset.Producer, new Key("dual key 3")); Assert.AreEqual(1, keys.KeysetFor(KeyScheme.Sha1Dual).ProducerKeys.Count); keys.Remove(KeyScheme.Sha1Dual, DualKeyScheme.Subset.Producer, new Key("dual key 1")); Assert.AreEqual(0, keys.KeysetFor(KeyScheme.Sha1Dual).ProducerKeys.Count); // remove a non-existent key, check nothing Bad happens keys.Remove(KeyScheme.Sha1Consumer, new Key("blah")); keys.Remove(KeyScheme.Sha1Dual, DualKeyScheme.Subset.Consumer, new Key("dual key 2")); Assert.AreEqual(0, keys.KeysetFor(KeyScheme.Sha1Dual).ConsumerKeys.Count); SingleKeySet consumerKeys = keys.KeysetFor(KeyScheme.Sha1Consumer); Assert.AreEqual(1, consumerKeys.Count); keys.Remove(KeyScheme.Sha1Consumer, new Key("consumer key 1")); Assert.AreEqual(0, consumerKeys.Count); SingleKeySet producerKeys = keys.KeysetFor(KeyScheme.Sha1Producer); Assert.AreEqual(1, producerKeys.Count); keys.Remove(KeyScheme.Sha1Producer, new Key("producer key 1")); Assert.AreEqual(0, producerKeys.Count); Assert.IsTrue(keys.IsEmpty); // remove a non-existent key, check nothing Bad happens keys.Remove(KeyScheme.Sha1Consumer, new Key("blah")); }
/// <summary> /// Remove all keys in a collection. /// </summary> /// <param name="keys">The keys to remove</param> public virtual void remove(Keys keys) { if (keys == this) throw new ArgumentException("Cannot remove key collection from itself"); foreach (KeyScheme scheme in keys.keySets.Keys) { IKeySet myKeys; if (keySets.TryGetValue(scheme, out myKeys)) { myKeys.Remove(keys.KeysetFor(scheme)); if (myKeys.IsEmpty) keySets.Remove(scheme); } } }
public bool Equals(Keys keys) { if (keySets.Count != keys.keySets.Count) return false; foreach (KeyScheme scheme in keys.keySets.Keys) { if (!KeysetFor(scheme).Equals(keys.KeysetFor(scheme))) return false; } return true; }
/// <summary> /// Compute the changes between one key collection and another. /// </summary> /// <param name="keys">The target key collection.</param> /// <returns>The delta (i.e. key sets to be added and removed) /// required to change this collection into the target.</returns> public Delta DeltaFrom(Keys keys) { if (keys == this) return Delta.EMPTY_DELTA; Keys addedKeys = new Keys(); Keys removedKeys = new Keys(); foreach (KeyScheme scheme in KeyScheme.Schemes) { IKeySet existingKeyset = KeysetFor(scheme); IKeySet otherKeyset = keys.KeysetFor(scheme); addedKeys.Add(scheme, otherKeyset.Subtract(existingKeyset)); removedKeys.Add(scheme, existingKeyset.Subtract(otherKeyset)); } return new Delta(addedKeys, removedKeys); }
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); }