예제 #1
0
        private BindingContext()
        {
            InlinePartialTemplates = new CascadeDictionary <string, Action <EncodedTextWriter, BindingContext> >();

            RootDataObject    = new FixedSizeDictionary <ChainSegment, object, ChainSegment.ChainSegmentEqualityComparer>(16, 7, ChainSegment.EqualityComparer);
            ContextDataObject = new FixedSizeDictionary <ChainSegment, object, ChainSegment.ChainSegmentEqualityComparer>(16, 7, ChainSegment.EqualityComparer);
            BlockParamsObject = new FixedSizeDictionary <ChainSegment, object, ChainSegment.ChainSegmentEqualityComparer>(16, 7, ChainSegment.EqualityComparer);

            _objectDescriptor = new DeferredValue <BindingContext, ObjectDescriptor>(this, context => ObjectDescriptor.Create(context.Value, context.Configuration));
        }
예제 #2
0
        public IteratorValues(BindingContext bindingContext) : this()
        {
            _data = bindingContext.ContextDataObject;
            _wellKnownVariables = bindingContext.WellKnownVariables;

            _data.AddOrReplace(ChainSegment.Value, null, out _wellKnownVariables[(int)ChainSegment.Value.WellKnownVariable]);
            _data.AddOrReplace(ChainSegment.First, BoxedValues.True, out _wellKnownVariables[(int)ChainSegment.First.WellKnownVariable]);
            _data.AddOrReplace(ChainSegment.Last, BoxedValues.False, out _wellKnownVariables[(int)ChainSegment.Last.WellKnownVariable]);
            _data.AddOrReplace(ChainSegment.Index, BoxedValues.Zero, out _wellKnownVariables[(int)ChainSegment.Index.WellKnownVariable]);
        }
예제 #3
0
        public void Copy()
        {
            var keys   = new object[245];
            var values = new object[245];

            for (int i = 0; i < 245; i++)
            {
                keys[i]   = new object();
                values[i] = new object();
            }

            var indexes = new EntryIndex <object> [245];

            for (int i = 0; i < 245; i++)
            {
                var key   = keys[i];
                var value = values[i];

                FixedSizeDictionary.AddOrReplace(key, value, out var index);
                indexes[i] = index;

                Assert.True(FixedSizeDictionary.ContainsKey(index));
                Assert.True(FixedSizeDictionary.ContainsKey(key));
                Assert.True(FixedSizeDictionary.TryGetValue(key, out var actualValue));

                Assert.Equal(value, actualValue);

                Assert.True(FixedSizeDictionary.TryGetValue(index, out actualValue));

                Assert.Equal(value, actualValue);
            }

            var destination = new FixedSizeDictionary <object, object, EqualityComparers.ReferenceEqualityComparer <object> >(15, 17, new EqualityComparers.ReferenceEqualityComparer <object>());

            FixedSizeDictionary.CopyTo(destination);
            FixedSizeDictionary.Clear();

            for (int i = 0; i < 245; i++)
            {
                var key   = keys[i];
                var value = values[i];
                destination.TryGetIndex(key, out var index);

                Assert.True(destination.ContainsKey(index));
                Assert.True(destination.ContainsKey(key));
                Assert.True(destination.TryGetValue(key, out var actualValue));

                Assert.Equal(value, actualValue);

                Assert.True(destination.TryGetValue(index, out actualValue));

                Assert.Equal(value, actualValue);
            }
        }
예제 #4
0
        private BindingContext()
        {
            InlinePartialTemplates = new CascadeIndex <string, Action <EncodedTextWriter, BindingContext>, StringEqualityComparer>(new StringEqualityComparer(StringComparison.OrdinalIgnoreCase));

            Bag = new CascadeIndex <string, object, StringEqualityComparer>(new StringEqualityComparer(StringComparison.OrdinalIgnoreCase));
            ContextDataObject = new FixedSizeDictionary <ChainSegment, object, ChainSegment.ChainSegmentEqualityComparer>(16, 7, ChainSegment.EqualityComparer);
            BlockParamsObject = new FixedSizeDictionary <ChainSegment, object, ChainSegment.ChainSegmentEqualityComparer>(16, 7, ChainSegment.EqualityComparer);

            Descriptor = new DeferredValue <BindingContext, ObjectDescriptor>(this, context =>
            {
                return(ObjectDescriptor.Create(context.Value));
            });
        }
예제 #5
0
        public void TryGetEntry_Empty_ShouldReturnFalse()
        {
            // Arrange
            KeyValuePair <string, int>[] source = Array.Empty <KeyValuePair <string, int> >();

            FixedSizeDictionary <int> dictionary = FixedSizeDictionary <int> .Create(source, x => x.Key, x => x.Value);

            // Act
            bool value = dictionary.TryGetEntry(new Fixture().Create <string>(), out FixedSizeDictionary <int> .Entry entry);

            // Assert
            value.ShouldBeFalse();
            entry.ShouldBe(default);
예제 #6
0
        public void Create_IncreasesCountCorrectly(int elementsCount)
        {
            // Arrange
            KeyValuePair <string, int>[] source = new Fixture {
                RepeatCount = elementsCount
            }.CreateMany <KeyValuePair <string, int> >().Distinct().ToArray();

            // Act
            FixedSizeDictionary <int> dictionary = FixedSizeDictionary <int> .Create(source, x => x.Key, x => x.Value);

            // Assert
            dictionary.Count.ShouldBe(source.Length);
        }
예제 #7
0
 public BlockParamsValues(BindingContext context, ChainSegment[] variables)
 {
     _variables = variables;
     if (context != null)
     {
         _values        = context.BlockParamsObject;
         _configuration = context.Configuration;
     }
     else
     {
         _values        = null;
         _configuration = null;
     }
 }
예제 #8
0
        internal HelperOptions(
            TemplateDelegate template,
            TemplateDelegate inverse,
            ChainSegment[] blockParamsValues,
            BindingContext frame
            )
        {
            _extensions = frame.Extensions;

            OriginalTemplate = template;
            OriginalInverse  = inverse;
            Frame            = frame;
            BlockParams      = blockParamsValues;
        }
예제 #9
0
        public void TryGetEntry_ExistingKey_ShouldReturnEntryAndTrue(int elementsCount)
        {
            // Arrange
            var fixture = new Fixture {
                RepeatCount = elementsCount
            };

            KeyValuePair <string, int>[] source = fixture.CreateMany <KeyValuePair <string, int> >().Distinct().ToArray();

            var keyValuePair = elementsCount is 0 ? fixture.Create <KeyValuePair <string, int> >() : source.RandomElement();

            FixedSizeDictionary <int> dictionary = FixedSizeDictionary <int> .Create(source, x => x.Key, x => x.Value);

            // Act
            bool value = dictionary.TryGetEntry(keyValuePair.Key, out FixedSizeDictionary <int> .Entry entry);

            // Assert
            value.ShouldBeTrue();
            entry.Key.ShouldBe(keyValuePair.Key);
            entry.Value.ShouldBe(keyValuePair.Value);
        }
예제 #10
0
        public ObjectIteratorValues(BindingContext bindingContext) : this()
        {
            var configuration = bindingContext.Configuration;

            _data = bindingContext.ContextDataObject;
            _supportLastInObjectIterations = configuration.Compatibility.SupportLastInObjectIterations;
            _wellKnownVariables            = bindingContext.WellKnownVariables;
            if (!_supportLastInObjectIterations)
            {
                var undefined = UndefinedBindingResult.Create(ChainSegment.Last);
                _data.AddOrReplace(ChainSegment.Last, undefined, out _wellKnownVariables[(int)ChainSegment.Last.WellKnownVariable]);
            }
            else
            {
                _data.AddOrReplace(ChainSegment.Last, BoxedValues.False, out _wellKnownVariables[(int)ChainSegment.Last.WellKnownVariable]);
            }

            _data.AddOrReplace(ChainSegment.Key, null, out _wellKnownVariables[(int)ChainSegment.Key.WellKnownVariable]);
            _data.AddOrReplace(ChainSegment.Value, null, out _wellKnownVariables[(int)ChainSegment.Value.WellKnownVariable]);
            _data.AddOrReplace(ChainSegment.First, BoxedValues.True, out _wellKnownVariables[(int)ChainSegment.First.WellKnownVariable]);
            _data.AddOrReplace(ChainSegment.Index, BoxedValues.Zero, out _wellKnownVariables[(int)ChainSegment.Index.WellKnownVariable]);
        }
예제 #11
0
 public BlockParamsValues(BindingContext context, ChainSegment[] variables)
 {
     _variables = variables;
     _values    = context?.BlockParamsObject;
 }
예제 #12
0
        public void Create_DuplicateKeys_Throws()
        {
            // Arrange
            IEnumerable <int> source = new Fixture().CreateMany <int>();

            // Act & Assert
            InvalidOperationException exception = Should.Throw <InvalidOperationException>(() => FixedSizeDictionary <int> .Create(source, _ => "Duplicate", x => x));

            exception.Message.ShouldContain("same key");
        }
예제 #13
0
 public void CalculateCapacity_ReturnsCorrectValue(int size, int expected)
 {
     FixedSizeDictionary <int> .CalculateCapacity(size).ShouldBe(expected);
 }
예제 #14
0
 public DataValues(BindingContext context)
 {
     _data = context.ContextDataObject;
     _wellKnownVariables = context.WellKnownVariables;
 }
예제 #15
0
        static FixedSizeDictionaryTests()
        {
            var referenceEqualityComparer = new EqualityComparers.ReferenceEqualityComparer <object>();

            FixedSizeDictionary = new FixedSizeDictionary <object, object, EqualityComparers.ReferenceEqualityComparer <object> >(15, 17, referenceEqualityComparer);
        }