示例#1
0
        public void TaskMapTrivial()
        {
            var t1 = TaskMonad.Return(5);
            var t2 = t1.Map(Convert.ToString);

            Assert.That(t2.Result, Is.EqualTo("5"));
        }
示例#2
0
        async Task FillTestParams(TradingMacro tmOriginal, Action <IList <KeyValuePair <string, object>[]> > paramsTransformation)
        {
            var c = _testParamValuesSeparators;

            if (!_testParamsRaw.Any())
            {
                if (!ReplayArguments.IsWww && tmOriginal.UseTestFile)
                {
                    var od = new Microsoft.Win32.OpenFileDialog()
                    {
                        FileName = "TestParams", DefaultExt = ".txt", Filter = "Text documents(.txt)|*.txt"
                    };
                    var odRes = od.ShowDialog();
                    if (!odRes.GetValueOrDefault())
                    {
                        throw new ArgumentException("Must provide test params file name.");
                    }
                    tmOriginal.TestFileName = System.IO.Path.GetFileName(od.FileName);
                    if (tmOriginal.TestFileName.Contains("skipme"))
                    {
                        tmOriginal.TestFileName = "";
                    }
                    else
                    {
                        var paramsDict = Lib.ReadTestParameters(od.FileName);
                        _testParamsRaw.AddRange(paramsDict.Select(kv => kv.Value.Split(c).Select(v => new KeyValuePair <string, object>(kv.Key, v)).ToArray()));
                    }
                }
                else if (ReplayArguments.IsWww)
                {
                    ReplayArguments.LastWwwError = "";
                    var strats = TaskMonad.RunSync(() => ReadStrategies(tmOriginal, (name, desc, content, uri, diff) => new { name, content, diff }));
                    Func <string, bool> isTest = s => s.ToLower().Trim().EndsWith("{t}");
                    await strats.Select(s => s.First())
                    .Take(2)
                    .OrderByDescending(s => isTest(s.name))
                    .Where(s => isTest(s.name) || s.diff.IsEmpty())
                    .OnEmpty(() => { LogWww(new Exception(ReplayArguments.LastWwwError = "Current settings don't match any strategy")); })
                    .Select(strategy => {
                        tmOriginal.TestFileName = strategy.name;
                        var paramsDict          = Lib.ReadParametersFromString(strategy.content);
                        _testParamsRaw.AddRange(
                            paramsDict
                            .Select(kv => kv.Value.Split(c).Select(v => new KeyValuePair <string, object>(kv.Key, v))
                                    .ToArray()));
                        return(tmOriginal.LoadActiveSettings(strategy.name, TradingMacro.ActiveSettingsStore.Gist));
                    }).WhenAll();
                }
                else
                {
                    var testParams = tmOriginal.GetPropertiesByAttibute <CategoryAttribute>(a => a.Category == TradingMacro.categoryTest);
                    var paramsDict = testParams.ToDictionary(p => p.Item2.Name.Substring(4), p => p.Item2.GetValue(tmOriginal, null).ToString().ParseParamRange());
                    _testParamsRaw.AddRange(paramsDict.Where(kv => !string.IsNullOrWhiteSpace(kv.Value))
                                            .Select(kv => kv.Value.Split(c).Select(v => new KeyValuePair <string, object>(kv.Key, v)).ToArray()));
                }
            }
            TestParams.Clear();
            paramsTransformation(_testParamsRaw);
            _testParamsRaw.CartesianProduct().ForEach(tp => TestParams.Enqueue(tp.ToArray()));
        }
示例#3
0
        public void TaskSelectManyMethodChain()
        {
            var m = TaskMonad.Return(5).SelectMany(t1 =>
                                                   TaskMonad.Return(t1 * 10));

            Assert.That(m.Result, Is.EqualTo(50));
        }
示例#4
0
        public void TaskFlatMapTrivial()
        {
            var t1 = Task.FromResult(5);
            var t2 = t1.FlatMap(n => TaskMonad.Return(Convert.ToString(n)));

            Assert.That(t2.Result, Is.EqualTo("5"));
        }
示例#5
0
        public void TaskSelectManyOverloadMethodChain()
        {
            var m = TaskMonad.Return(5).SelectMany(t1 =>
                                                   TaskMonad.Return(10), (t1, t2) =>
                                                   Convert.ToString(t1 * t2));

            Assert.That(m.Result, Is.EqualTo("50"));
        }
示例#6
0
        public void TaskSelectLinq()
        {
            var m =
                from t in TaskMonad.Return(5)
                select Convert.ToString(t);

            Assert.That(m.Result, Is.EqualTo("5"));
        }
示例#7
0
        public void UsingMapToTryToMimicFlatMap()
        {
            var t1 = TaskMonad.Return(5);
            var t2 = t1.Map(n => TaskMonad.Return(Convert.ToString(n)));

            // t2 is Task<Task<string>> instead of Task<string>.
            Assert.That(t2.Result.Result, Is.EqualTo("5"));
        }
示例#8
0
        public void TaskSelectManyOverloadLinq()
        {
            var m =
                from t1 in TaskMonad.Return(5)
                from t2 in TaskMonad.Return(10)
                select Convert.ToString(t1 *t2);

            Assert.That(m.Result, Is.EqualTo("50"));
        }
示例#9
0
        public void TaskSelectManyLinq()
        {
            var m =
                from t1 in TaskMonad.Return(5)
                from t2 in TaskMonad.Return(t1 * 10)
                select t2;

            Assert.That(m.Result, Is.EqualTo(50));
        }
示例#10
0
        public void TaskFlatMapRealistic()
        {
            var t1 = Task.Factory.StartNew(() =>
            {
                MimicRealisticProcessing();
                return(5);
            });
            var t2 = t1.FlatMap(n => TaskMonad.Return(Convert.ToString(n)));

            Assert.That(t2.Result, Is.EqualTo("5"));
        }
示例#11
0
        public void TaskSelectMethodChain()
        {
            var m = TaskMonad.Return(5).Select(Convert.ToString);

            Assert.That(m.Result, Is.EqualTo("5"));
        }
示例#12
0
        public void Return()
        {
            var m = TaskMonad.Return(5);

            Assert.That(m.Result, Is.EqualTo(5));
        }
示例#13
0
 public static void Main(string[] args)
 {
     EnumerableMonad.EnumerableComposition();
     TaskMonad.TaskComposition();
 }