public void TestAddThrowsOnNullKey()
        {
            IWeightedRandomizer <ExampleClass> newTarget = CreateTarget <ExampleClass>();

            Assert.Throws <ArgumentNullException>(() => newTarget.Add(null, 2));
            Assert.Throws <ArgumentNullException>(() => newTarget.Add(null));
        }
        private static void TestSpeed(IWeightedRandomizer <int> randomizer, bool displayText)
        {
            GCLatencyMode oldLatencyMode = GCSettings.LatencyMode;

            try
            {
                //Prevent garbage collection during tests
                GCSettings.LatencyMode = GCLatencyMode.LowLatency;

                const int numIterations = 10000;
                Stopwatch timer         = new Stopwatch();
                if (displayText)
                {
                    Console.WriteLine("Testing {0}", randomizer.GetType().Name);
                    Console.WriteLine("--------------------------------");
                }

                //NextWithReplacement()/1000
                randomizer.Clear();
                timer.Reset();
                timer.Start();
                for (int i = 1; i <= numIterations; i++)
                {
                    randomizer.Add(i, i);
                }
                for (int i = 1; i <= numIterations / 1000; i++)
                {
                    randomizer.NextWithReplacement();
                }
                timer.Stop();
                GC.Collect();
                if (displayText)
                {
                    Console.WriteLine("Add()x{0} + NextWithReplacement()x{1}: {2} ms", numIterations, numIterations / 1000,
                                      timer.ElapsedMilliseconds);
                }

                //NextWithReplacement()
                randomizer.Clear();
                timer.Reset();
                timer.Start();
                for (int i = 1; i <= numIterations; i++)
                {
                    randomizer.Add(i, i);
                }
                for (int i = 1; i <= numIterations; i++)
                {
                    randomizer.NextWithReplacement();
                }
                timer.Stop();
                GC.Collect();
                if (displayText)
                {
                    Console.WriteLine("Add()x{0} + NextWithReplacement()x{1}: {2} ms", numIterations, numIterations,
                                      timer.ElapsedMilliseconds);
                }

                //NextWithReplacement() * 10
                randomizer.Clear();
                timer.Reset();
                timer.Start();
                for (int i = 1; i <= numIterations; i++)
                {
                    randomizer.Add(i, i);
                }
                for (int i = 1; i <= 10 * numIterations; i++)
                {
                    randomizer.NextWithReplacement();
                }
                timer.Stop();
                GC.Collect();
                if (displayText)
                {
                    Console.WriteLine("Add()x{0} + NextWithReplacement()x{1}: {2} ms", numIterations, 10 * numIterations,
                                      timer.ElapsedMilliseconds);
                }

                //NextWithReplacement() (interleaved)
                randomizer.Clear();
                timer.Reset();
                timer.Start();
                for (int i = 1; i <= numIterations; i++)
                {
                    randomizer.Add(i, i);
                    randomizer.NextWithReplacement();
                }
                timer.Stop();
                GC.Collect();
                if (displayText)
                {
                    Console.WriteLine("( Add() + NextWithReplacement() )x{0} (interleaved): {1} ms", numIterations,
                                      timer.ElapsedMilliseconds);
                }

                //NextWithRemoval()
                randomizer.Clear();
                timer.Reset();
                timer.Start();
                for (int i = 1; i <= numIterations; i++)
                {
                    randomizer.Add(i, i);
                }
                for (int i = 1; i <= numIterations; i++)
                {
                    randomizer.NextWithRemoval();
                }
                timer.Stop();
                GC.Collect();
                if (displayText)
                {
                    Console.WriteLine("Add()x{0} + NextWithRemoval()x{1}: {2} ms", numIterations, numIterations,
                                      timer.ElapsedMilliseconds);

                    Console.WriteLine();
                    Console.WriteLine();
                }
            } //end try
            finally
            {
                // ALWAYS set the latency mode back
                GCSettings.LatencyMode = oldLatencyMode;
            }
        }
Пример #3
0
        private void Initialize()
        {
            _firstNameRandomizer  = new StaticWeightedRandomizer <FirstName>();
            _lastNameRandomizer   = new StaticWeightedRandomizer <LastName>();
            _ageRandomizer        = new StaticWeightedRandomizer <Age>();
            _raceRandomizer       = new StaticWeightedRandomizer <Race>();
            _genderRandomizer     = new StaticWeightedRandomizer <Gender>();
            _physTraitRandomizer  = new StaticWeightedRandomizer <PhysicalTrait>();
            _persTraitRandomizer  = new StaticWeightedRandomizer <PersonalityTrait>();
            _wantsRandomizer      = new StaticWeightedRandomizer <Want>();
            _secretsRandomizer    = new StaticWeightedRandomizer <Secret>();
            _hooksRandomizer      = new StaticWeightedRandomizer <Hook>();
            _bondsRandomizer      = new StaticWeightedRandomizer <Bond>();
            _itemRandomizer       = new StaticWeightedRandomizer <Item>();
            _alignmentRandomizer  = new StaticWeightedRandomizer <Alignment>();
            _occupationRandomizer = new StaticWeightedRandomizer <Occupation>();

            foreach (var fn in _values.FirstNames)
            {
                _firstNameRandomizer.Add(fn, fn.Weight);
            }

            foreach (var ln in _values.LastNames)
            {
                _lastNameRandomizer.Add(ln, ln.Weight);
            }

            foreach (var a in _values.Ages)
            {
                _ageRandomizer.Add(a, a.Weight);
            }

            foreach (var r in _values.Races)
            {
                _raceRandomizer.Add(r, r.Weight);
            }

            foreach (var g in _values.Genders)
            {
                _genderRandomizer.Add(g, g.Weight);
            }

            foreach (var phys in _values.PhysicalTraits)
            {
                _physTraitRandomizer.Add(phys, phys.Weight);
            }

            foreach (var pers in _values.PersonalityTraits)
            {
                _persTraitRandomizer.Add(pers, pers.Weight);
            }

            foreach (var w in _values.Wants)
            {
                _wantsRandomizer.Add(w, w.Weight);
            }

            foreach (var s in _values.Secrets)
            {
                _secretsRandomizer.Add(s, s.Weight);
            }

            foreach (var h in _values.Hooks)
            {
                _hooksRandomizer.Add(h, h.Weight);
            }

            foreach (var b in _values.Bonds)
            {
                _bondsRandomizer.Add(b, b.Weight);
            }

            foreach (var i in _values.Items)
            {
                _itemRandomizer.Add(i, i.Weight);
            }

            foreach (var a in _values.Alignments)
            {
                _alignmentRandomizer.Add(a, a.Weight);
            }

            foreach (var o in _values.Occupations)
            {
                _occupationRandomizer.Add(o, o.Weight);
            }
        }