public void PrevYearDateIsRetrievedCorrect()
        {
            var rates  = new YearRates(2017, new[] { "Date|1 TST|1 TRY", "01.Jan 2017|13.01|15.01" }, m_Config, m_Parser, null);
            var result = rates[new DateTime(2015, 12, 31)]?.ToArray();

            Assert.IsNull(result, "Result is not null");
        }
        [TestMethod] public void MultipleLinesAreStoredCorrectly()
        {
            var rates = new YearRates(2017,
                                      new[]
            {
                "Date|1 TST|1 TRY",
                "01.Jan 2017|13.01|15.01",
                "01.Mar 2017|17.01|19.01",
                "01.Jun 2017|21.01|23.01"
            }, m_Config, m_Parser, null);
            var result = rates[new DateTime(2017, 1, 31)]?.ToArray();

            Assert.IsNotNull(result, "Result #1 is null");
            Assert.AreEqual(2, result.Length, "Result #1 length is incorrect");
            Assert.AreEqual("1 TST", result[0].Key, "Key #1-0 is incorrect");
            Assert.AreEqual("1 TRY", result[1].Key, "Key #1-1 is incorrect");
            Assert.AreEqual(13.01f, result[0].Value, "Value #1-0 is incorrect");
            Assert.AreEqual(15.01f, result[1].Value, "Value #1-1 is incorrect");

            result = rates[new DateTime(2017, 3, 1)]?.ToArray();
            Assert.IsNotNull(result, "Result #2 is null");
            Assert.AreEqual(2, result.Length, "Result #2 length is incorrect");
            Assert.AreEqual("1 TST", result[0].Key, "Key #2-0 is incorrect");
            Assert.AreEqual("1 TRY", result[1].Key, "Key #2-1 is incorrect");
            Assert.AreEqual(17.01f, result[0].Value, "Value #2-0 is incorrect");
            Assert.AreEqual(19.01f, result[1].Value, "Value #2-1 is incorrect");

            result = rates[new DateTime(2018, 12, 31)]?.ToArray();
            Assert.IsNotNull(result, "Result #3 is null");
            Assert.AreEqual(2, result.Length, "Result #3 length is incorrect");
            Assert.AreEqual("1 TST", result[0].Key, "Key #3-0 is incorrect");
            Assert.AreEqual("1 TRY", result[1].Key, "Key #3-1 is incorrect");
            Assert.AreEqual(21.01f, result[0].Value, "Value #3-0 is incorrect");
            Assert.AreEqual(23.01f, result[1].Value, "Value #3-1 is incorrect");
        }
        public void ThisYearPrevDateIsRetrievedCorrect()
        {
            var rates  = new YearRates(2017, new[] { "Date|1 TST|1 TRY", "02.Jan 2017|13.01|15.01" }, m_Config, m_Parser, null);
            var result = rates[new DateTime(2017, 1, 1)]?.ToArray();

            Assert.IsNotNull(result, "Result is null");
            Assert.AreEqual(2, result.Length, "Result length is incorrect");
            Assert.AreEqual("1 TST", result[0].Key, "Key #0 is incorrect");
            Assert.AreEqual("1 TRY", result[1].Key, "Key #1 is incorrect");
            Assert.AreEqual(float.NaN, result[0].Value, "Value #0 is incorrect");
            Assert.AreEqual(float.NaN, result[1].Value, "Value #1 is incorrect");
        }
        public void InvalidFloatIsTreatedAsNaN()
        {
            var rates = new YearRates(2017,
                                      new[]
            {
                "Date|1 TST|1 TRY",
                "01.Jan 2017|13.01|15,01"
            }, m_Config, m_Parser, null);
            var result = rates[new DateTime(2017, 1, 1)]?.ToArray();

            Assert.IsNotNull(result, "Result is null");
            Assert.AreEqual(2, result.Length, "Result length is incorrect");
            Assert.AreEqual("1 TST", result[0].Key, "Key #0 is incorrect");
            Assert.AreEqual("1 TRY", result[1].Key, "Key #1 is incorrect");
            Assert.AreEqual(13.01f, result[0].Value, "Value #0 is incorrect");
            Assert.AreEqual(float.NaN, result[1].Value, "Value #1 is incorrect");
        }
        public void LongLineIsIgnored()
        {
            var rates = new YearRates(2017,
                                      new[]
            {
                "Date|1 TST|1 TRY",
                "01.Jan 2017|13.01|15.01|17.01"
            }, m_Config, m_Parser, null);
            var result = rates[new DateTime(2017, 1, 1)]?.ToArray();

            Assert.IsNotNull(result, "Result is null");
            Assert.AreEqual(2, result.Length, "Result length is incorrect");
            Assert.AreEqual("1 TST", result[0].Key, "Key #0 is incorrect");
            Assert.AreEqual("1 TRY", result[1].Key, "Key #1 is incorrect");
            Assert.AreEqual(13.01f, result[0].Value, "Value #0 is incorrect");
            Assert.AreEqual(15.01f, result[1].Value, "Value #1 is incorrect");
        }
        public void StorageIsWorking()
        {
            var storage = Storage.Instance;

            Assert.IsNull(storage[DateTime.Today], "Empty storage returns not null");
            Assert.IsFalse(storage.TryAddYear(2017, null, m_Parser, m_Config, null), "Successfully added with invalid params");
            var lines2016 = new[]
            {
                "Data|1 GHJ|100500 QWE", "01.Jul 2016|1.1|2.1"
            };

            Assert.IsTrue(storage.TryAddYear(2016, lines2016, m_Parser, m_Config, null), "Unable to add with valid params");
            var rates2016 = new YearRates(2016, lines2016, m_Config, m_Parser, null);

            Assert.IsNull(storage[new DateTime(2015, 12, 31)]?.ToArray(),
                          "Value before storage is invalid");
            Assert.IsTrue(
                rates2016[new DateTime(2016, 01, 01)].SequenceEqual(
                    storage[new DateTime(2016, 01, 01)]),
                "Value at the beginning of storage is invalid");
            Assert.IsTrue(
                rates2016[new DateTime(2016, 07, 01)].SequenceEqual(
                    storage[new DateTime(2016, 07, 01)]),
                "Value in the middle of storage is invalid");
            Assert.IsTrue(
                rates2016[new DateTime(2017, 03, 01)].SequenceEqual(
                    storage[new DateTime(2017, 03, 01)]),
                "Value in the end of storage is invalid");
            Assert.IsFalse(storage.TryAddYear(2016, lines2016, m_Parser, m_Config, null), "Successfully added duplicate");
            var lines2017 = new[]
            {
                "Data|1 GHQ|100500 QWE", "01.Feb 2017|3.1|4.1"
            };
            var rates2017 = new YearRates(2017, lines2017, m_Config, m_Parser, null);

            Assert.IsTrue(storage.TryAddYear(2017, lines2017, m_Parser, m_Config, null), "Unable to add with valid params #2");
            Assert.IsTrue(
                rates2017[new DateTime(2017, 03, 01)].SequenceEqual(
                    storage[new DateTime(2017, 03, 01)]),
                "Value haven't changed after add");
        }