Пример #1
0
        private void LogFile(string fileName, string itemsName, ICounterFactory counterFactory)
        {
            var fullFileName = _directory + fileName + ".csv";

            using (TextWriter tw = File.CreateText(fullFileName)) {
                bool isSimp = false;
                if (_allLoggedData.Count == 0)
                {
                    return;
                }

                if (counterFactory.GetNewCounter(_allLoggedData[0]) is SimpCounter)
                {
                    isSimp = true;
                }

                WriteHeadings(tw, itemsName, isSimp);

                var totalBefore  = 0;
                var totalAfter   = 0;
                var totalRemoved = 0;

                var totalSubexprsBefore     = 0;
                var totalSubexprsAfter      = 0;
                var totalNumItemsSimplified = 0;

                //var data = new List<Tuple<string, int, int, float, float, float>>();
                foreach (var logData in _allLoggedData)
                {
                    var counter     = counterFactory.GetNewCounter(logData);
                    var countBefore = counter.GetCountBefore();
                    if (countBefore == 0)
                    {
                        continue;
                    }
                    var   countAfter        = counter.GetCountAfter();
                    var   countRemoved      = counter.GetRemovedCount();
                    float removalPercentage = ((float)countRemoved / (float)countBefore) * 100;
                    totalBefore  += countBefore;
                    totalAfter   += countAfter;
                    totalRemoved += countRemoved;

                    tw.Write("{0},{1},{2},{3},{4}%", logData.OriginalProgram.Name, countBefore, countAfter, countRemoved, removalPercentage);
                    if (!isSimp || countAfter == 0)
                    {
                        tw.WriteLine();
                    }
                    else
                    {
                        var simpCounter                  = counter as SimpCounter;
                        var numberOfItemsSimplified      = simpCounter.GetNumberOfRemainingThatCanBeSimplified();
                        var subexprsBeforeSimplification = simpCounter.GetNumberOfSubexpressionsBeforeSimplification();
                        var subexprsAfterSimplification  = simpCounter.GetNumberOfSubexpressionsAfterSimplification();
                        var subexprsRemoved              = subexprsBeforeSimplification - subexprsAfterSimplification;
                        totalNumItemsSimplified += numberOfItemsSimplified;
                        totalSubexprsBefore     += subexprsBeforeSimplification;
                        totalSubexprsAfter      += subexprsAfterSimplification;
                        float subexprRemovedPercentage       = ((float)subexprsRemoved / (float)subexprsBeforeSimplification) * 100f;
                        float numberRemainingItemsSimplified = ((float)numberOfItemsSimplified / (float)countAfter) * 100f;
                        tw.WriteLine(",{0},{1}%,{2},{3},{4},{5}%", numberOfItemsSimplified, numberRemainingItemsSimplified, subexprsBeforeSimplification, subexprsAfterSimplification,
                                     subexprsRemoved, subexprRemovedPercentage);
                    }
                }
                tw.WriteLine();
                float avgRemovalPct = ((float)totalRemoved / (float)totalBefore) * 100f;
                tw.Write("Total,{0},{1},{2},{3}%", totalBefore, totalAfter, totalRemoved, avgRemovalPct);
                if (!isSimp || totalAfter == 0)
                {
                    tw.WriteLine();
                }
                else
                {
                    var   subExprsRemoved          = totalSubexprsBefore - totalSubexprsAfter;
                    float subExprRemovalPct        = ((float)subExprsRemoved / (float)totalSubexprsBefore) * 100f;
                    float pctOfRemainingSimplified = ((float)totalNumItemsSimplified / (float)totalAfter) * 100f;
                    tw.WriteLine(",{0},{1}%,{2},{3},{4},{5}%", totalNumItemsSimplified, pctOfRemainingSimplified,
                                 totalSubexprsBefore, totalSubexprsAfter, subExprsRemoved, subExprRemovalPct);
                }
            }
        }