public void GetTypeMethodsByInterface()
        {
            // Arrange
            var repository = new WeightedTypeRepository();
            repository.AddMethod(new Func<int>(() => { return 5; }));

            // Act
            var methods = new List<MethodInfo>(repository.GetMethods(typeof(IComparable<int>)));

            // Assert
            Assert.AreEqual(1, methods.Count);
        }
        public void GetTypeMethodsByBaseType()
        {
            // Arrange
            var repository = new WeightedTypeRepository();
            repository.AddMethod(new Func<WebClient>(() => { return new WebClient(); }));

            // Act
            var methods = new List<MethodInfo>(repository.GetMethods(typeof(Component)));

            // Assert
            Assert.AreEqual(1, methods.Count);
        }
        public void OrderMethodsByWeightProbability()
        {
            // Arrange
            var repository = new WeightedTypeRepository();

            // Act
            repository.AddMethod(new Func<int>(MockType.Method1), 0.00001);
            repository.AddMethod(new Func<int>(MockType.Method2), 100000000);
            var methods = new List<MethodInfo>(repository.GetMethods(typeof(int)));

            // Assert
            Assert.AreEqual(2, methods.Count);
            Assert.AreEqual("Method2", methods[0].Name);
            Assert.AreEqual("Method1", methods[1].Name);
        }