public void ContainsIndexReturnsTrueForValuesFrom0To255()
        {
            var allAreContained = true;
            var lzWDictionary   = new LzWDictionary(258, OnFullDictionaryOption.Empty);

            for (uint i = 0; i < 256; i++)
            {
                if (!lzWDictionary.ContainsIndex(i))
                {
                    allAreContained = false;
                    break;
                }
            }

            Assert.IsTrue(allAreContained);
        }
        public void DecodeFile(IFileReader fileReader, IFileWriter fileWriter)
        {
            if (fileReader == null)
            {
                throw new ArgumentNullException(nameof(fileReader));
            }

            if (fileWriter == null)
            {
                throw new ArgumentNullException(nameof(fileWriter));
            }

            InterpretHeader(fileReader);

            var firstIndex  = fileReader.ReadBits(numberOfBitsForIndex);
            var firstString = lzWDictionary.GetStringByIndex(firstIndex);

            firstString.WriteToFile(fileWriter);

            var lastString = firstString;

            while (!fileReader.ReachedEndOfFile && fileReader.BitsLeft >= numberOfBitsForIndex)
            {
                var    currentIndex = fileReader.ReadBits(numberOfBitsForIndex);
                string currentString;

                if (lzWDictionary.ContainsIndex(currentIndex))
                {
                    currentString = lzWDictionary.GetStringByIndex(currentIndex);

                    var dictionaryNewString = lastString + currentString[0];
                    lzWDictionary.Add(dictionaryNewString);
                }
                else
                {
                    var dictionaryNewString = lastString + lastString[0];
                    lzWDictionary.Add(dictionaryNewString);

                    currentString = lzWDictionary.GetStringByIndex(currentIndex);
                }

                currentString.WriteToFile(fileWriter);
                lastString = currentString;
            }
        }