public void GetDescription_SimplifiedLongCollections()
        {
            var directory  = new MockDirectory();
            var descriptor = new TagDescriptor <MockDirectory>(directory);

            const int tagType = 1;

            directory.Set(tagType, Enumerable.Range(0, 16).Select(i => i).ToArray());

            Assert.Equal("0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15", descriptor.GetDescription(tagType));

            directory.Set(tagType, Enumerable.Range(0, 17).Select(i => i).ToArray());

            Assert.Equal("[17 values]", descriptor.GetDescription(tagType));
        }
        public void BooleanTests()
        {
            Action <Directory, int> assertPresentTrueBoolean = (dictionary, i) =>
            {
                Assert.True(dictionary.GetBoolean(i));
                bool value;
                Assert.True(dictionary.TryGetBoolean(i, out value));
                Assert.True(dictionary.GetBoolean(i));
            };

            Action <Directory, int> assertPresentFalseBoolean = (dictionary, i) =>
            {
                Assert.False(dictionary.GetBoolean(i));
                bool value;
                Assert.True(dictionary.TryGetBoolean(i, out value));
                Assert.False(dictionary.GetBoolean(i));
            };

            Action <Directory, int> assertMissingBoolean = (dictionary, i) =>
            {
                bool value;
                Assert.False(dictionary.TryGetBoolean(i, out value));
                Assert.Throws <MetadataException>(() => dictionary.GetBoolean(i));
            };

            // NOTE string is not convertible to boolean other than for "true" and "false"

            Test(BuildDirectory(_singleValues.Where(v => !(v is string))), assertPresentTrueBoolean, assertMissingBoolean);
            Test(BuildDirectory(_singleZeroValues.Where(v => !(v is string))), assertPresentFalseBoolean, assertMissingBoolean);
            Test(BuildDirectory(_arraysOfSingleValues.Where(v => !(v is string[]))), assertPresentTrueBoolean, assertMissingBoolean);
            Test(BuildDirectory(_arraysOfSingleZeroValues.Where(v => !(v is string[]))), assertPresentFalseBoolean, assertMissingBoolean);

            var directory = new MockDirectory();

            directory.Set(1, "True");
            directory.Set(2, "true");
            directory.Set(3, "False");
            directory.Set(4, "false");

            Assert.True(directory.GetBoolean(1));
            Assert.True(directory.GetBoolean(2));
            Assert.False(directory.GetBoolean(3));
            Assert.False(directory.GetBoolean(4));
        }
        private static Directory BuildDirectory(IEnumerable <object> values)
        {
            var directory = new MockDirectory();

            foreach (var pair in Enumerable.Range(1, int.MaxValue).Zip(values, Tuple.Create))
            {
                directory.Set(pair.Item1, pair.Item2);
            }

            return(directory);
        }
        private static Directory BuildDirectory(IEnumerable<object> values)
        {
            var directory = new MockDirectory();

            foreach (var pair in Enumerable.Range(1, int.MaxValue).Zip(values, Tuple.Create))
                directory.Set(pair.Item1, pair.Item2);

            return directory;
        }
        public void BooleanTests()
        {
            Action<Directory, int> assertPresentTrueBoolean = (dictionary, i) =>
            {
                Assert.True(dictionary.GetBoolean(i));
                bool value;
                Assert.True(dictionary.TryGetBoolean(i, out value));
                Assert.True(dictionary.GetBoolean(i));
            };

            Action<Directory, int> assertPresentFalseBoolean = (dictionary, i) =>
            {
                Assert.False(dictionary.GetBoolean(i));
                bool value;
                Assert.True(dictionary.TryGetBoolean(i, out value));
                Assert.False(dictionary.GetBoolean(i));
            };

            Action<Directory, int> assertMissingBoolean = (dictionary, i) =>
            {
                bool value;
                Assert.False(dictionary.TryGetBoolean(i, out value));
                Assert.Throws<MetadataException>(() => dictionary.GetBoolean(i));
            };

            // NOTE string is not convertible to boolean other than for "true" and "false"

            Test(BuildDirectory(_singleValues.Where(v => !(v is string))), assertPresentTrueBoolean, assertMissingBoolean);
            Test(BuildDirectory(_singleZeroValues.Where(v => !(v is string))), assertPresentFalseBoolean, assertMissingBoolean);
            Test(BuildDirectory(_arraysOfSingleValues.Where(v => !(v is string[]))), assertPresentTrueBoolean, assertMissingBoolean);
            Test(BuildDirectory(_arraysOfSingleZeroValues.Where(v => !(v is string[]))), assertPresentFalseBoolean, assertMissingBoolean);

            var directory = new MockDirectory();

            directory.Set(1, "True");
            directory.Set(2, "true");
            directory.Set(3, "False");
            directory.Set(4, "false");

            Assert.True(directory.GetBoolean(1));
            Assert.True(directory.GetBoolean(2));
            Assert.False(directory.GetBoolean(3));
            Assert.False(directory.GetBoolean(4));
        }