public void Run()
        {
            using (var reader = new StreamReader("algo1-programming_prob-2sum.txt"))
            using (var writer = new StreamWriter("output.txt"))
            {
                var numbers = GetNumbers(reader);
                var twoSumAlgorithm = new TwoSumAlgorithm(numbers);

                var sw1 = Stopwatch.StartNew();

                var total1 = Partitioner.Create(-10000, 10001).AsParallel().Select(
                    range =>
                    {
                        int count = 0;
                        for (var i = range.Item1; i < range.Item2; i++)
                        {
                            if (twoSumAlgorithm.CanGetSum(i))
                            {
                                count++;
                            }
                        }

                        return count;
                    }).Sum();

                sw1.Stop();

                writer.WriteLine(total1);
                writer.WriteLine(sw1.ElapsedMilliseconds);

                var sw2 = Stopwatch.StartNew();
                var total2 = Partitioner.Create(-10000, 10001).AsParallel().Select(
                    range => twoSumAlgorithm.CheckSequence(range.Item1, range.Item2)).Sum();
                sw2.Stop();

                writer.WriteLine(total2);
                writer.WriteLine(sw2.ElapsedMilliseconds);
            }
        }
        public void CanGetSumTest()
        {
            var numbers1 = Enumerable.Range(1, 10).Select(x => (long)x);
            var twoSumAlgorithm1 = new TwoSumAlgorithm(numbers1);
            twoSumAlgorithm1.CanGetSum(2).Should().BeFalse();
            twoSumAlgorithm1.CanGetSum(5).Should().BeTrue();
            twoSumAlgorithm1.CanGetSum(19).Should().BeTrue();
            twoSumAlgorithm1.CanGetSum(20).Should().BeFalse();

            var numbers2 = Enumerable.Range(1, 5).Select(x => (long)x * 2);
            var twoSumAlgorithm2 = new TwoSumAlgorithm(numbers2);
            twoSumAlgorithm2.CanGetSum(7).Should().BeFalse();
            twoSumAlgorithm2.CanGetSum(12).Should().BeTrue();

            var numbers3 = Enumerable.Range(1, 10).Select(x => (long)x);
            var twoSumAlgorithm3 = new TwoSumAlgorithm(numbers3);
            int count3 = Enumerable.Range(1, 20).Count(number => twoSumAlgorithm3.CanGetSum(number));
            count3.Should().Be(17);

            var numbers4 = Enumerable.Range(1, 5).Select(x => (long)x * 2);
            var twoSumAlgorithm4 = new TwoSumAlgorithm(numbers4);
            int count4 = Enumerable.Range(1, 20).Count(number => twoSumAlgorithm4.CanGetSum(number));
            count4.Should().Be(7);
        }