예제 #1
0
        private static void SimpleMode()
        {
            Console.WriteLine("Simple mode");
            var @object = new
            {
                property1  = 2.3,
                property2  = 2.3f,
                property3  = "str",
                property4  = 1,
                property5  = 1L,
                property6  = (short)1,
                nestedProp = new
                {
                    nes1 = 2.3d,
                    nes2 = 5.6,
                    sd   = "AOF"
                }
            };

            var @object2 = new
            {
                property1  = 2.31,
                property2  = 2.33f,
                property3  = "str",
                property4  = 1,
                property5  = 1L,
                property6  = (short)1,
                nestedProp = new
                {
                    nes1 = 2.3f,
                    nes2 = 5.6,
                    sd   = "aof"
                }
            };

            var extractor = new BorsukSoftware.ObjectFlattener.ObjectFlattener();

            extractor.Plugins.Add(new BorsukSoftware.ObjectFlattener.Plugins.StandardPlugin()
            {
                ProcessFields     = true,
                ProcessProperties = true
            });

            var comparer = new BorsukSoftware.Testing.Comparison.ObjectComparer
            {
                ObjectComparerNoAvailablePluginBehaviour = BorsukSoftware.Testing.Comparison.ObjectComparerNoAvailablePluginBehaviour.ReportAsDifference
            };

            comparer.ComparisonPlugins.Add(new BorsukSoftware.Testing.Comparison.Plugins.DoubleComparerPlugin());
            comparer.ComparisonPlugins.Add(new BorsukSoftware.Testing.Comparison.Plugins.FloatComparerPlugin());
            comparer.ComparisonPlugins.Add(new BorsukSoftware.Testing.Comparison.Plugins.Int16ComparerPlugin());
            comparer.ComparisonPlugins.Add(new BorsukSoftware.Testing.Comparison.Plugins.Int32ComparerPlugin());
            comparer.ComparisonPlugins.Add(new BorsukSoftware.Testing.Comparison.Plugins.Int64ComparerPlugin());
            comparer.ComparisonPlugins.Add(new BorsukSoftware.Testing.Comparison.Plugins.SimpleStringComparerPlugin()
            {
                IgnoreCase = true
            });

            var output = comparer.CompareValues(extractor.FlattenObject(null, @object), extractor.FlattenObject(null, object2));

            foreach (var pair in output)
            {
                Console.WriteLine($" {pair.Key} - {pair.Value.ExpectedValue} ({pair.Value.ExpectedValue?.GetType()?.Name}) vs. {pair.Value.ActualValue} ({pair.Value.ActualValue?.GetType()?.Name})=> {pair.Value.ComparisonPayload}");
            }
        }
예제 #2
0
        private static void FinanceMode()
        {
            Console.WriteLine("Finance mode");

            // Spoof up some data - typically this would be read in from your actual system / expected set of results etc.
            DataStucture[] data = new DataStucture[2];
            for (int i = 0; i < data.Length; i++)
            {
                data[i] = new DataStucture();

                data[i].InstrumentLevelResults = new InstrumentResults[200];
                for (int j = 0; j < data[i].InstrumentLevelResults.Length; ++j)
                {
                    data[i].InstrumentLevelResults[j] = new InstrumentResults()
                    {
                        BaseCurrency      = "GBP",
                        Identifier        = $"Trade #{j}",
                        LocalValue        = 200 + (20 * j),
                        BaseCurrencyValue = 200 + (20 * j)
                    };
                }
            }

            var r             = new Random();
            var itemsToUpdate = r.Next(20);

            for (int i = 0; i < itemsToUpdate; ++i)
            {
                var idx = r.Next(data[1].InstrumentLevelResults.Length);
                data[1].InstrumentLevelResults[idx].LocalValue += 2 * r.NextDouble();

                // Randomly adjust a second value for demonstration purposes
                if (r.NextDouble() < 0.2)
                {
                    data[1].InstrumentLevelResults[idx].BaseCurrencyValue += 2 * r.NextDouble();
                }
            }

            var objectFlattener = new BorsukSoftware.ObjectFlattener.ObjectFlattener();

            objectFlattener.Plugins.Add(new BorsukSoftware.ObjectFlattener.Plugins.StandardPlugin());

            var objectComparer = new BorsukSoftware.Testing.Comparison.ObjectComparer();

            objectComparer.ComparisonPlugins.Add(new BorsukSoftware.Testing.Comparison.Plugins.SimpleStringComparerPlugin());
            objectComparer.ComparisonPlugins.Add(new BorsukSoftware.Testing.Comparison.Plugins.DoubleComparerPlugin());

            // Perform the actual comparison...
            var comparisons = Enumerable.Range(0, data[0].InstrumentLevelResults.Length).
                              Select(i => new { i, expected = data[0].InstrumentLevelResults[i], actual = data[1].InstrumentLevelResults[i] }).
                              Select(tuple => new
            {
                tuple.actual,
                tuple.expected,
                comparisons = objectComparer.CompareValues(
                    objectFlattener.FlattenObject(null, tuple.expected),
                    objectFlattener.FlattenObject(null, tuple.actual)).ToList()
            }).
                              ToList();

            // Create a friendly output format for display
            var matching    = comparisons.Where(t => t.comparisons.Count == 0).ToList();
            var differences = comparisons.Where(t => t.comparisons.Count != 0).ToList();

            var output = new
            {
                summary = new
                {
                    matching    = matching.Count,
                    differences = differences.Count
                },
                differences = differences.Select(t => new
                {
                    identifier  = t.actual.Identifier,
                    differences = t.comparisons.Select(t2 => new
                    {
                        key        = t2.Key,
                        expected   = t2.Value.ExpectedValue,
                        actual     = t2.Value.ActualValue,
                        difference = t2.Value.ComparisonPayload
                    })
                }),
            };

            var text = System.Text.Json.JsonSerializer.Serialize(output, new System.Text.Json.JsonSerializerOptions {
                WriteIndented = true
            });

            Console.WriteLine(text);
        }