public void ValidateCRHasOneCount(string k1, string k2, decimal pr)
        {
            TPLPatterns tplPatterns = new TPLPatterns();

            tplPatterns.RecordCalculatedResults(k1, k2, pr);
            Assert.Equal(1, tplPatterns.calculatedResults.Count);
        }
        public void CRFlattened1And1(string k1, string k2, decimal pr)
        {
            TPLPatterns tplPatterns = new TPLPatterns();

            tplPatterns.RecordCalculatedResults(k1, k2, pr);
            string fs = string.Empty;

            tplPatterns.calculatedResults.SelectMany(pair => pair.Value.SelectMany(innerPair => $"{pair.Key},{innerPair.Key},{innerPair.Value};"))
            .ToList()
            .ForEach(x => fs += x.ToString());
            Assert.Equal("k1=1,k2=2,1.1;", fs);
        }
        public void CRFlattened2And2(string str)
        {
            TPLPatterns tplPatterns = new TPLPatterns();
            Regex       RE          = new Regex("(?<k1>.*?),(?<k2>.*?),(?<pr>.*?);");
            var         match       = RE.Match(str);

            while (match.Success)
            {
                tplPatterns.RecordCalculatedResults(match.Groups["k1"].Value,
                                                    match.Groups["k2"].Value,
                                                    decimal.Parse(match.Groups["pr"].Value));
                match = match.NextMatch();
            }
            string fs = string.Empty;

            tplPatterns.calculatedResults.OrderBy(kp => kp.Key)
            .SelectMany(pair => pair.Value.OrderBy(kp => kp.Key)
                        .SelectMany(innerPair => $"{pair.Key},{innerPair.Key},{innerPair.Value};"))
            .ToList()
            .ForEach(x => fs += x.ToString());
            Assert.Equal("k1=1,k2=1,1.1;k1=1,k2=2,1.2;k1=2,k2=1,2.1;k1=2,k2=2,2.2;",
                         fs);
        }