public static void ShouldAddRangeAndRetrieveViaIterator()
        {
            var expected = values2.Concat(values1);
            var multiDict = new MultiValueDictionary<string, string>();
            multiDict.AddRange("key2", values2);
            multiDict.AddRange("key1", values1);

            CollectionAssert.AreEqual(expected, multiDict);
        }
Example #2
0
        public static void ShouldAddRangeAndRetrieveViaIterator()
        {
            var expected  = values2.Concat(values1);
            var multiDict = new MultiValueDictionary <string, string>();

            multiDict.AddRange("key2", values2);
            multiDict.AddRange("key1", values1);

            CollectionAssert.AreEqual(expected, multiDict);
        }
Example #3
0
        public static void ShouldContainKeyValue()
        {
            var multiDict = new MultiValueDictionary <string, string>();

            multiDict.AddRange("key2", values2);
            multiDict.AddRange("key1", values1);
            multiDict.Add("key3", "海亀");

            Assert.IsTrue(multiDict.Contains("key2", "dojpa4"));
            Assert.IsTrue(multiDict.Contains("key3", "海亀"));
            Assert.IsTrue(multiDict.Contains("key1", "test1"));
        }
        public void AddRange_KeyWithValues()
        {
            sut.AddRange("a", new List <string>()
            {
                "1", "2"
            });

            sut.Should().BeEquivalentTo(
                new KeyValuePair <string, IReadOnlyCollection <string> >("a", new List <string>()
            {
                "1", "2"
            }));
        }
 public static void ShouldClear()
 {
     var multiDict = new MultiValueDictionary<string, string>();
     multiDict.AddRange("key2", values2);
     multiDict.AddRange("key1", values1);
     multiDict.Add("key3", "海亀");
     multiDict.Clear();
     IReadOnlyCollection<string> values;
     Assert.IsFalse(multiDict.TryGetValue("海亀", out values));
     Assert.IsFalse(multiDict.TryGetValue("key1", out values));
     Assert.IsFalse(multiDict.TryGetValue("key2", out values));
     Assert.IsFalse(multiDict.TryGetValue("key3", out values));
 }
        public static void ShouldContainValue()
        {
            var multiDict = new MultiValueDictionary<int, string>();
            multiDict.AddRange(100, values2);
            multiDict.AddRange(-5, values1);
            multiDict.Add(1337, "海亀");

            Assert.IsTrue(multiDict.ContainsValue("dojpa2"));
            Assert.IsTrue(multiDict.ContainsValue("海亀"));
            Assert.IsTrue(multiDict.ContainsValue("test4"));
            Assert.IsTrue(multiDict.Contains("海亀"));
            Assert.IsTrue(multiDict.Contains("test1"));
            Assert.IsTrue(multiDict.Contains("dojpa4"));
        }
Example #7
0
        public static void ShouldContainValue()
        {
            var multiDict = new MultiValueDictionary <int, string>();

            multiDict.AddRange(100, values2);
            multiDict.AddRange(-5, values1);
            multiDict.Add(1337, "海亀");

            Assert.IsTrue(multiDict.ContainsValue("dojpa2"));
            Assert.IsTrue(multiDict.ContainsValue("海亀"));
            Assert.IsTrue(multiDict.ContainsValue("test4"));
            Assert.IsTrue(multiDict.Contains("海亀"));
            Assert.IsTrue(multiDict.Contains("test1"));
            Assert.IsTrue(multiDict.Contains("dojpa4"));
        }
Example #8
0
        public static void ShouldClear()
        {
            var multiDict = new MultiValueDictionary <string, string>();

            multiDict.AddRange("key2", values2);
            multiDict.AddRange("key1", values1);
            multiDict.Add("key3", "海亀");
            multiDict.Clear();
            IReadOnlyCollection <string> values;

            Assert.IsFalse(multiDict.TryGetValue("海亀", out values));
            Assert.IsFalse(multiDict.TryGetValue("key1", out values));
            Assert.IsFalse(multiDict.TryGetValue("key2", out values));
            Assert.IsFalse(multiDict.TryGetValue("key3", out values));
        }
Example #9
0
 private void Apply(SagaKeysChangedEvent ev)
 {
     keys.Clear();
     foreach (var namePair in ev.Keys)
     {
         keys.AddRange(namePair.Key, namePair.Value);
     }
 }
Example #10
0
        public void AddRange(int size)
        {
            List<int> values = new List<int>();
            for (int i = 0; i < size; i++)
                values.Add(i);

            foreach (var iteration in Benchmark.Iterations)
            {
                MultiValueDictionary<int, int> empty = new MultiValueDictionary<int, int>();
                using (iteration.StartMeasurement())
                    for (int i = 0; i <= 20000; i++)
                        empty.AddRange(i, values);
            }
        }
Example #11
0
        public async Task <MultiValueDictionary <NotificationBuffer, BufferedNotification> > SelectNotificationsForReleaseAsync(IReadRepository readRepository)
        {
            DateTimeOffset maxDate       = Clock.Current.Now.Subtract(minTimeDelay);
            var            notifications = readRepository.FindAll <BufferedNotification>()
                                           .Where(x => x.TimeQueued <= maxDate && x.Buffer.GovernorId == Id);
            var buffers = await notifications.Select(x => x.Buffer)
                          .Include(readRepository, x => x.Notifications)
                          .ToListAsync(readRepository);

            var res = new MultiValueDictionary <NotificationBuffer, BufferedNotification>();

            foreach (var buffer in buffers.Distinct())
            {
                res.AddRange(buffer, buffer.Notifications);
            }

            return(res);
        }
        private void Clear()
        {
            commandTypePermissions = new Lazy <MultiValueDictionary <Type, Permission> >(() =>
            {
                var dict = new MultiValueDictionary <Type, Permission>();
                permissionTypeIndexer.EnsureIndexed();

                foreach (var commandType in typeExplorer
                         .GetAllTypes()
                         .Where(x => x.IsClass && !x.IsAbstract && !x.IsGenericTypeDefinition)
                         .Where(x => typeof(ICommandBase).IsAssignableFrom(x)))
                {
                    dict.AddRange(commandType, GetCommandTypePermissions(commandType));
                }

                return(dict);
            });
        }
Example #13
0
        public void AddRange(int size)
        {
            List <int> values = new List <int>();

            for (int i = 0; i < size; i++)
            {
                values.Add(i);
            }

            foreach (var iteration in Benchmark.Iterations)
            {
                MultiValueDictionary <int, int> empty = new MultiValueDictionary <int, int>();
                using (iteration.StartMeasurement())
                    for (int i = 0; i <= 20000; i++)
                    {
                        empty.AddRange(i, values);
                    }
            }
        }
Example #14
0
        public async Task <MultiValueDictionary <NotificationBuffer, BufferedNotification> > SelectNotificationsForReleaseAsync(IReadRepository readRepository)
        {
            DateTimeOffset maxDate = Clock.Current.Now.Subtract(minTimeDelay);
            var            buffers = readRepository.FindAll <NotificationBuffer>()
                                     .Where(x => x.GovernorId == Id);
            var buffersWithNotifications = buffers.GroupJoin(readRepository.FindAll <BufferedNotification>(),
                                                             notification => notification.Id,
                                                             buffer => buffer.Buffer.Id,
                                                             (buffer, notifications) => new { Buffer = buffer, Notifications = notifications });
            var toRelease = await buffersWithNotifications
                            .Where(x => x.Notifications.Any(y => y.TimeQueued <= maxDate))
                            .ToListAsync();

            var res = new MultiValueDictionary <NotificationBuffer, BufferedNotification>();

            foreach (var pair in toRelease)
            {
                res.AddRange(pair.Buffer, pair.Notifications);
            }

            return(res);
        }
Example #15
0
        public static Automaton NfaToDfa(Automaton nfa, out MultiValueDictionary <State, State> dfaStatesToNfa)
        {
            var dfa = new Automaton();

            dfa.CaptureNames = nfa.CaptureNames;
            var dfaStartState = dfa.AddState();

            dfa.StartState = dfaStartState;
            var nfaTransitionsToDfa = new MultiValueDictionary <Transition, Transition>();
            var transitionClasses   = new List <Transition>();
            var mergeStates         = new HashSet <State>();

            dfaStatesToNfa = new MultiValueDictionary <State, State>();
            dfaStatesToNfa.Add(dfaStartState, nfa.StartState);
            //不动点算法,不能使用 foreach!
            for (int i = 0; i < dfa.States.Count; ++i)
            {
                var curDfaState = dfa.States[i];
                var nfaStates   = dfaStatesToNfa[curDfaState];
                foreach (var nfaState in nfaStates)
                {
                    foreach (var outTransition in nfaState.Output)
                    {
                        if (!nfaTransitionsToDfa.Values.SelectMany(transitions => transitions).Contains(outTransition))
                        {
                            transitionClasses.Add(outTransition);
                            nfaTransitionsToDfa.Add(outTransition, outTransition);
                        }
                    }
                }

                foreach (var transitionClass in transitionClasses)
                {
                    var nfaTransitions = nfaTransitionsToDfa[transitionClass];
                    foreach (var nfaTransition in nfaTransitions)
                    {
                        var state = nfaTransition.End;
                        if (!mergeStates.Contains(state))
                        {
                            mergeStates.Add(state);
                        }
                    }

                    mergeStates.OrderBy(state => state);

                    //mergeStates 是候选的一个 DFA 状态。在这之前,还需要判断:这个候选状态是否已经存在于 DFA 中了?
                    //var isContained = dfaStatesToNfa.Values.Contains((IReadOnlyCollection<State>)mergeStates);
                    State newDfaState = null;
                    foreach (var dfaState in dfaStatesToNfa.Keys)
                    {
                        var prevNfaStates = dfaStatesToNfa[dfaState];
                        if (prevNfaStates.Count == mergeStates.Count &&
                            prevNfaStates.SequenceEqual(mergeStates))
                        {
                            newDfaState = dfaState;
                            break;
                        }
                    }
                    if (newDfaState == null)
                    {
                        newDfaState = dfa.AddState();
                        dfaStatesToNfa.AddRange(newDfaState, mergeStates);
                        newDfaState.IsFinalState = mergeStates.Any(state => state.IsFinalState);
                    }

                    var dfaTransition = dfa.AddTransition(curDfaState, newDfaState, transitionClass.TransitionType);
                    dfaTransition.Capture = transitionClass.Capture;
                    dfaTransition.Range   = transitionClass.Range;
                    dfaTransition.Index   = transitionClass.Index;
                    mergeStates.Clear();
                }
                transitionClasses.Clear();
                nfaTransitionsToDfa.Clear();
            }

            return(dfa);
        }
Example #16
0
        public static void ShouldContainKey()
        {
            var multiDict = new MultiValueDictionary<string, string>();
            multiDict.AddRange("key2", values2);
            multiDict.AddRange("key1", values1);
            multiDict.Add("key3", "海亀");

            Assert.IsTrue(multiDict.ContainsKey("key1"));
            Assert.IsTrue(multiDict.ContainsKey("key3"));
            Assert.IsTrue(multiDict.ContainsKey("key2"));
            Assert.IsTrue(multiDict.Contains("key1"));
            Assert.IsTrue(multiDict.Contains("key2"));
            Assert.IsTrue(multiDict.Contains("key3"));
        }
Example #17
0
        public static Automaton NfaToDfa(Automaton nfa, out MultiValueDictionary<State, State> dfaStatesToNfa)
        {
            var dfa = new Automaton();
            dfa.CaptureNames = nfa.CaptureNames;
            var dfaStartState = dfa.AddState();
            dfa.StartState = dfaStartState;
            var nfaTransitionsToDfa = new MultiValueDictionary<Transition, Transition>();
            var transitionClasses = new List<Transition>();
            var mergeStates = new HashSet<State>();
            dfaStatesToNfa = new MultiValueDictionary<State, State>();
            dfaStatesToNfa.Add(dfaStartState, nfa.StartState);
            //不动点算法,不能使用 foreach!
            for(int i = 0; i < dfa.States.Count; ++i)
            {
                var curDfaState = dfa.States[i];
                var nfaStates = dfaStatesToNfa[curDfaState];
                foreach(var nfaState in nfaStates)
                {
                    foreach(var outTransition in nfaState.Output)
                    {
                        if (!nfaTransitionsToDfa.Values.SelectMany(transitions => transitions).Contains(outTransition))
                        {
                            transitionClasses.Add(outTransition);
                            nfaTransitionsToDfa.Add(outTransition, outTransition);
                        }
                    }
                }

                foreach(var transitionClass in transitionClasses)
                {
                    var nfaTransitions = nfaTransitionsToDfa[transitionClass];
                    foreach(var nfaTransition in nfaTransitions)
                    {
                        var state = nfaTransition.End;
                        if (!mergeStates.Contains(state))
                            mergeStates.Add(state);
                    }

                    mergeStates.OrderBy(state => state);

                    //mergeStates 是候选的一个 DFA 状态。在这之前,还需要判断:这个候选状态是否已经存在于 DFA 中了?
                    //var isContained = dfaStatesToNfa.Values.Contains((IReadOnlyCollection<State>)mergeStates);
                    State newDfaState = null;
                    foreach(var dfaState in dfaStatesToNfa.Keys)
                    {
                        var prevNfaStates = dfaStatesToNfa[dfaState];
                        if (prevNfaStates.Count == mergeStates.Count &&
                            prevNfaStates.SequenceEqual(mergeStates))
                        {
                            newDfaState = dfaState;
                            break;
                        }
                    }
                    if(newDfaState == null)
                    {
                        newDfaState = dfa.AddState();
                        dfaStatesToNfa.AddRange(newDfaState, mergeStates);
                        newDfaState.IsFinalState = mergeStates.Any(state => state.IsFinalState);
                    }

                    var dfaTransition = dfa.AddTransition(curDfaState, newDfaState, transitionClass.TransitionType);
                    dfaTransition.Capture = transitionClass.Capture;
                    dfaTransition.Range = transitionClass.Range;
                    dfaTransition.Index = transitionClass.Index;
                    mergeStates.Clear();
                }
                transitionClasses.Clear();
                nfaTransitionsToDfa.Clear();
            }

            return dfa;
        }
Example #18
0
 public void AddRange() => _dict.AddRange(_value, _values);