public void CopyOnWriteDictionary_Should_Add_And_Count()
 {
     var map = new CopyOnWriteDictionary<string, int>();
     map.Add("one", 1);
     map.Add("two", 2);
     Assert.AreEqual(2, map.Count);
     CollectionAssert.AreEquivalent(new[] { "one", "two" }, map.Keys);
     CollectionAssert.AreEquivalent(new[] { 1, 2 }, map.Values);
 }
示例#2
0
        public void ReadOperation_DoesNotDelegateToSourceDictionary_OnceDictionaryIsModified()
        {
            // Arrange
            var values           = new List <object>();
            var sourceDictionary = new Dictionary <string, object>
            {
                { "key1", "value1" },
                { "key2", "value2" }
            };
            var copyOnWriteDictionary = new CopyOnWriteDictionary <string, object>(
                sourceDictionary,
                StringComparer.OrdinalIgnoreCase
                );

            // Act
            copyOnWriteDictionary.Add("key3", "value3");
            copyOnWriteDictionary.Remove("key1");

            // Assert
            Assert.Equal(2, sourceDictionary.Count);
            Assert.Equal("value1", sourceDictionary["key1"]);
            Assert.Equal(2, copyOnWriteDictionary.Count);
            Assert.Equal("value2", copyOnWriteDictionary["KeY2"]);
            Assert.Equal("value3", copyOnWriteDictionary["key3"]);
        }
示例#3
0
 public void RegisterServiceHandler(string name, object handler)
 {
     if (name == null)
     {
         name = string.Empty;
     }
     _handlers.Add(name, handler);
 }
 public IDictionary CloneCustomMetadata()
 {
     CopyOnWriteDictionary<string, string> dictionary = new CopyOnWriteDictionary<string, string>(MSBuildNameIgnoreCaseComparer.Default);
     if (this.metadata != null)
     {
         foreach (KeyValuePair<string, string> pair in this.metadata)
         {
             dictionary.Add(pair.Key, EscapingUtilities.UnescapeAll(pair.Value));
         }
     }
     return dictionary;
 }
示例#5
0
        public IDictionary CloneCustomMetadata()
        {
            CopyOnWriteDictionary <string, string> dictionary = new CopyOnWriteDictionary <string, string>(MSBuildNameIgnoreCaseComparer.Default);

            if (this.metadata != null)
            {
                foreach (KeyValuePair <string, string> pair in this.metadata)
                {
                    dictionary.Add(pair.Key, EscapingUtilities.UnescapeAll(pair.Value));
                }
            }
            return(dictionary);
        }
示例#6
0
        /// <inheritdoc />
        public INodeMetrics GetOrCreateNodeMetrics(Host host)
        {
            var value = _nodeMetricsCollection.GetOrAdd(host, h =>
            {
                var nodeBucket = $"{_sessionBucket}.nodes.{MetricsManager.BuildHostAddressMetricPath(host.Address)}";

                var newRegistry = new NodeMetrics(_driverMetricsProvider, _metricsOptions, _metricsEnabled, nodeBucket);
                _nodeMetricsRegistryCollection.Add(host, newRegistry.MetricsRegistry);

                return(newRegistry);
            });

            return(value);
        }
示例#7
0
 /// <summary>
 /// Registers an IEndpointPushHandler for the specified endpoint to handle pushing messages.
 /// </summary>
 /// <param name="handler">The IEndpointPushHandler to register.</param>
 /// <param name="endpointId">The endpoint identity to register for.</param>
 public void RegisterEndpointPushHandler(IEndpointPushHandler handler, string endpointId)
 {
     if (_endpointPushHandlers == null)
     {
         lock (this.SyncRoot) {
             if (_endpointPushHandlers == null)
             {
                 _endpointPushHandlers = new CopyOnWriteDictionary(1);
             }
         }
     }
     if (_endpointPushHandlers.ContainsKey(endpointId))
     {
         MessageException me = new MessageException();
         me.FaultCode = EndpointPushHandlerAlreadyRegistered.ToString();
         throw me;
     }
     _endpointPushHandlers.Add(endpointId, handler);
 }
 public void CopyOnWriteDictionary_Should_Allow_Parallel_Calls_To_Add()
 {
     var actions = new List<Action>();
     var map = new CopyOnWriteDictionary<int, int>();
     for (var i = 0; i < 100; i++)
     {
         var item = i;
         actions.Add(() =>
         {
             map.Add(item, item * 1000);
         });
     }
     TestHelper.ParallelInvoke(actions);
     Assert.AreEqual(100, map.Count);
     for (var i = 0; i < 100; i++)
     {
         Assert.AreEqual(i * 1000, map[i]);
     }
     var counter = 0;
     CollectionAssert.AreEquivalent(Enumerable.Repeat(0, 100).Select(_ => counter++), map.Keys);
 }
示例#9
0
        public void SerializeDeserialize()
        {
            CopyOnWriteDictionary <int, string> dictionary = new CopyOnWriteDictionary <int, string>();

            dictionary.Add(1, "1");

            using (MemoryStream stream = new MemoryStream())
            {
                BinaryFormatter formatter = new BinaryFormatter();

                formatter.Serialize(stream, dictionary);
                stream.Position = 0;

                var dictionary2 = (CopyOnWriteDictionary <int, string>)formatter.Deserialize(stream);

                Assert.AreEqual(dictionary.Count, dictionary2.Count);
                Assert.AreEqual(dictionary.Comparer, dictionary2.Comparer);
                Assert.AreEqual("1", dictionary2[1]);

                dictionary2.Add(2, "2");
            }
        }
 public void CopyOnWriteDictionary_Should_Allow_Parallel_Calls_To_Remove()
 {
     var actions = new List<Action>();
     var map = new CopyOnWriteDictionary<int, int>();
     for (var i = 0; i < 100; i++)
     {
         map.Add(i, i * 2000);
     }
     Assert.AreEqual(100, map.Count);
     //remove everything except 0 and 1
     for (var i = 2; i < 100; i++)
     {
         var item = i;
         actions.Add(() =>
         {
             map.Remove(item);
         });
     }
     TestHelper.ParallelInvoke(actions);
     Assert.AreEqual(2, map.Count);
     Assert.AreEqual(0, map[0]);
     Assert.AreEqual(2000, map[1]);
 }
 public void CopyOnWriteDictionary_Should_Add_And_Remove()
 {
     var map = new CopyOnWriteDictionary<string, int>
     {
         {"one", 1},
         {"two", 2},
         {"three", 3},
         {"four", 4}
     };
     Assert.AreEqual(4, map.Count);
     CollectionAssert.AreEquivalent(new[] { "one", "two", "three", "four" }, map.Keys);
     CollectionAssert.AreEquivalent(new[] { 1, 2, 3, 4 }, map.Values);
     map.Remove("three");
     Assert.AreEqual(3, map.Count);
     map.Remove("one");
     Assert.AreEqual(2, map.Count);
     CollectionAssert.AreEquivalent(new[] { "two", "four" }, map.Keys);
     CollectionAssert.AreEquivalent(new[] { 2, 4 }, map.Values);
     map.Add("ten", 10);
     Assert.AreEqual(3, map.Count);
     CollectionAssert.AreEquivalent(new[] { "two", "four", "ten" }, map.Keys);
     CollectionAssert.AreEquivalent(new[] { 2, 4, 10 }, map.Values);
 }
示例#12
0
 /// <summary>
 /// This method supports the Fluorine infrastructure and is not intended to be used directly from your code.
 /// </summary>
 /// <param name="connection"></param>
 public void Register(IConnection connection)
 {
     _connectionToScope.Add(connection, connection.Scope);
 }
示例#13
0
 internal void AddFactory(string id, IFlexFactory factory)
 {
     _factories.Add(id, factory);
 }
        public void ReadOperation_DoesNotDelegateToSourceDictionary_OnceDictionaryIsModified()
        {
            // Arrange
            var values = new List<object>();
            var sourceDictionary = new Dictionary<string, object>
            {
                { "key1", "value1" },
                { "key2", "value2" }
            };
            var copyOnWriteDictionary = new CopyOnWriteDictionary<string, object>(
                sourceDictionary,
                StringComparer.OrdinalIgnoreCase);

            // Act
            copyOnWriteDictionary.Add("key3", "value3");
            copyOnWriteDictionary.Remove("key1");


            // Assert
            Assert.Equal(2, sourceDictionary.Count);
            Assert.Equal("value1", sourceDictionary["key1"]);
            Assert.Equal(2, copyOnWriteDictionary.Count);
            Assert.Equal("value2", copyOnWriteDictionary["KeY2"]);
            Assert.Equal("value3", copyOnWriteDictionary["key3"]);
        }
        public void SerializeDeserialize()
        {
            CopyOnWriteDictionary<int, string> dictionary = new CopyOnWriteDictionary<int, string>();
            dictionary.Add(1, "1");

            using (MemoryStream stream = new MemoryStream())
            {
                BinaryFormatter formatter = new BinaryFormatter();

                formatter.Serialize(stream, dictionary);
                stream.Position = 0;

                var dictionary2 = (CopyOnWriteDictionary<int, string>)formatter.Deserialize(stream);

                Assert.AreEqual(dictionary.Count, dictionary2.Count);
                Assert.AreEqual(dictionary.Comparer, dictionary2.Comparer);
                Assert.AreEqual("1", dictionary2[1]);

                dictionary2.Add(2, "2");
            }
        }