/// <summary>Compares two objects and returns a value indicating whether one is less than, equal to, or greater than the other.</summary>
        /// <param name="x">The first object to compare.</param>
        /// <param name="y">The second object to compare.</param>
        /// <returns>A signed integer that indicates the relative values of <paramref name="x" /> and <paramref name="y" />, as shown in the following table.
        ///  Value
        ///  Meaning
        ///  Less than zero
        /// <paramref name="x" /> is less than <paramref name="y" />.
        ///  Zero
        /// <paramref name="x" /> equals <paramref name="y" />.
        ///  Greater than zero
        /// <paramref name="x" /> is greater than <paramref name="y" />.</returns>
        public int Compare(ValueArray <string> x, ValueArray <string> y)
        {
            var valueX = this.GetValue(x);
            var valueY = this.GetValue(y);

            return(valueX.CompareTo(valueY));
        }
Exemple #2
0
            internal ValueArray[,] reduce(ValueArray[,] results, List <string> line)
            {
                var header_col = headerDict[line.Skip(skipCols).Take(headerKeys)];
                var row_keys   = line.Take(skipCols);

                var curr_values = new string[valueCount];

                for (int i = 0; i < valueCount; i++)
                {
                    curr_values[i] = line[skipCols + headerKeys + i];
                }

                if (rowDict.ContainsKey(row_keys))
                {
                    results[rowDict[row_keys], skipCols + header_col]          = new ValueArray();
                    results[rowDict[row_keys], skipCols + header_col].row_keys = row_keys;
                    results[rowDict[row_keys], skipCols + header_col].values   = curr_values;
                }
                else
                {
                    rowDict.Add(row_keys, currentLine);
                    results[currentLine, skipCols + header_col]          = new ValueArray();
                    results[currentLine, skipCols + header_col].row_keys = row_keys;
                    results[currentLine, skipCols + header_col].values   = curr_values;
                    currentLine++;
                }
                return(results);
            }
Exemple #3
0
 public override void DoRows(Parse theRows) {
     if (theRows == null) throw new TableStructureException("No header row.");
     ExamineTableStructure(theRows.Parts);
     if (expectedCount == 0) return;
     myValues = new ValueArray(RepeatString);
     base.DoRows(theRows.More);
 }
Exemple #4
0
        protected virtual bool OnNewWindowPolicyDecisionRequested(WebFrame frame, NetworkRequest request, WebNavigationAction action, WebPolicyDecision decision)
        {
            var val        = new Value(GType.Int);
            var valueArray = new ValueArray(5u);
            var array      = new Value[5];

            array [0] = new Value(this);
            valueArray.Append(array [0]);
            array [1] = new Value(frame);
            valueArray.Append(array [1]);
            array [2] = new Value(request);
            valueArray.Append(array [2]);
            array [3] = new Value(action);
            valueArray.Append(array [3]);
            array [4] = new Value(decision);
            valueArray.Append(array [4]);
            GLib.Object.g_signal_chain_from_overridden(valueArray.ArrayPtr, ref val);
            var array2 = array;

            for (int i = 0; i < array2.Length; i++)
            {
                var value = array2 [i];
                value.Dispose();
            }
            bool result = (bool)val;

            val.Dispose();
            return(result);
        }
Exemple #5
0
        public void VerifyExecuteCreateSubscriptionCommand()
        {
            var vm = new ProductTreeViewModel(this.option, this.session.Object, this.thingDialogNavigationService.Object, this.panelNavigationService.Object, null, null);

            var revisionNumber = typeof(Iteration).GetProperty("RevisionNumber");

            revisionNumber.SetValue(this.iteration, 50);

            var elementdef = new ElementDefinition(Guid.NewGuid(), this.assembler.Cache, this.uri)
            {
                Container = this.iteration
            };
            var anotherDomain = new DomainOfExpertise(Guid.NewGuid(), this.assembler.Cache, this.uri)
            {
                Name = "Not owned"
            };
            var boolParamType = new BooleanParameterType(Guid.NewGuid(), this.assembler.Cache, this.uri);
            var parameter     = new Parameter(Guid.NewGuid(), this.assembler.Cache, this.uri)
            {
                Owner = anotherDomain, Container = elementdef, ParameterType = boolParamType
            };
            var published = new ValueArray <string>(new List <string> {
                "published"
            });
            var paramValueSet = new ParameterValueSet(Guid.NewGuid(), this.assembler.Cache, this.uri)
            {
                Published   = published,
                Manual      = published,
                Computed    = published,
                ValueSwitch = ParameterSwitchKind.COMPUTED
            };

            parameter.ValueSet.Add(paramValueSet);
            elementdef.Parameter.Add(parameter);
            this.iteration.TopElement = elementdef;

            CDPMessageBus.Current.SendObjectChangeEvent(this.iteration, EventKind.Updated);
            Assert.AreSame(elementdef, vm.TopElement.Single().Thing);
            Assert.AreEqual(1, vm.TopElement.Single().ContainedRows.Count);
            var paramRow = vm.TopElement.Single().ContainedRows.First() as ParameterOrOverrideBaseRowViewModel;

            Assert.NotNull(paramRow);
            vm.SelectedThing = paramRow;


            Assert.IsTrue(vm.CreateSubscriptionCommand.CanExecute(null));
            Assert.AreEqual(0, paramRow.Thing.ParameterSubscription.Count);

            vm.SelectedThing = null;
            vm.CreateSubscriptionCommand.Execute(null);
            this.session.Verify(x => x.Write(It.IsAny <OperationContainer>()), Times.Never);

            vm.SelectedThing = vm.TopElement.Single();
            vm.CreateSubscriptionCommand.Execute(null);
            this.session.Verify(x => x.Write(It.IsAny <OperationContainer>()), Times.Never);

            vm.SelectedThing = paramRow;
            vm.CreateSubscriptionCommand.Execute(null);
            this.session.Verify(x => x.Write(It.IsAny <OperationContainer>()), Times.Exactly(1));
        }
Exemple #6
0
        private void ConfirmSeed()
        {
            try
            {
                ConfirmSeedCommand.Executable = false;

                var decodedSeed = WalletSeed.DecodeAndValidateUserInput(Input, _pgpWordList);
                if (ValueArray.ShallowEquals(_seed, decodedSeed))
                {
                    _wizard.CurrentDialog = new PromptPassphrasesDialog(Wizard, _seed);
                }
                else
                {
                    MessageBox.Show("Seed does not match");
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Invalid seed");
            }
            finally
            {
                ConfirmSeedCommand.Executable = true;
            }
        }
        // Returns the number of methods newly added to the dictionary.
        private bool AddMethodsOverwriteExisting(
            MemberInfo /*!*/[] /*!*/ newOverloads, RubyMethodGroupInfo /*!*/[] overloadOwners)
        {
            bool anyChange = false;

            for (int i = 0; i < newOverloads.Length; i++)
            {
                var method = (MethodBase)newOverloads[i];
                if (IsVisible(method))
                {
                    var paramTypes = new ValueArray <Type>(ReflectionUtils.GetParameterTypes(method.GetParameters()));
                    if (_allMethods == null)
                    {
                        _allMethods = new Dictionary <ValueArray <Type>, ClrOverloadInfo>();
                    }

                    _allMethods[paramTypes] = new ClrOverloadInfo {
                        Overload = method,
                        Owner    = (overloadOwners != null) ? overloadOwners[i] : null
                    };

                    anyChange = true;
                }
            }
            return(anyChange);
        }
Exemple #8
0
        /// <summary>
        /// Set a ValueSet for a compound ParameterType with 2 components
        /// </summary>
        /// <param name="valueset">The <see cref="ParameterValueSetBase"/> to set</param>
        private void SetCompoundValueSet(ParameterValueSetBase valueset)
        {
            var manualSet = new ValueArray <string>(new List <string> {
                "manual1", "manual2"
            });
            var referenceSet = new ValueArray <string>(new List <string> {
                "ref1", "ref2"
            });
            var computedSet = new ValueArray <string>(new List <string> {
                "computed1", "computed2"
            });
            var publishedSet = new ValueArray <string>(new List <string> {
                "published1", "published2"
            });
            var formulaSet = new ValueArray <string>(new List <string> {
                "formula1", "formula2"
            });

            valueset.Manual      = manualSet;
            valueset.Reference   = referenceSet;
            valueset.Computed    = computedSet;
            valueset.Published   = publishedSet;
            valueset.Formula     = formulaSet;
            valueset.ValueSwitch = ParameterSwitchKind.REFERENCE;
        }
Exemple #9
0
        public void InsertWorks()
        {
            var arr = new ValueArray <int>(5);

            for (int i = 0; i < 5; i++)
            {
                arr[i] = i + 1;
            }

            Assert.Equal(1, arr[0]);
            arr.Insert(0, 99);
            Assert.Equal(99, arr[0]);
            Assert.Equal(1, arr[1]);
            Assert.Equal(2, arr[2]);
            Assert.Equal(6, arr.Count);

            arr.Insert(1, 28);
            Assert.Equal(99, arr[0]);
            Assert.Equal(28, arr[1]);
            Assert.Equal(1, arr[2]);
            Assert.Equal(7, arr.Count);

            arr.Insert(7, 100);
            Assert.Equal(8, arr.Count);
            Assert.Equal(100, arr[7]);
        }
Exemple #10
0
        public void VerifyThatGetPathWorks()
        {
            // **************************INPUT***************************************
            var published = new ValueArray <string>(new List <string> {
                "manual1", "manual2"
            }, this.valueset);
            var actual = new ValueArray <string>(new List <string> {
                "manual1", "manual2"
            }, this.valueset);

            this.valueset.Published    = published;
            this.valueset.Manual       = actual;
            this.valueset.ValueSwitch  = ParameterSwitchKind.MANUAL;
            this.valueset.ActualOption = this.option;

            var compoundtype = new CompoundParameterType(Guid.NewGuid(), null, this.uri);

            var component1 = new ParameterTypeComponent(Guid.NewGuid(), null, this.uri)
            {
                ParameterType = this.parameterType1,
                ShortName     = "c1"
            };

            var component2 = new ParameterTypeComponent(Guid.NewGuid(), null, this.uri)
            {
                ParameterType = this.parameterType1,
                ShortName     = "c2"
            };

            compoundtype.Component.Add(component1);
            compoundtype.Component.Add(component2);

            var state2 = new ActualFiniteState(Guid.NewGuid(), null, this.uri);

            this.stateList.ActualState.Add(state2);

            this.parameter1.ParameterType = compoundtype;
            this.parameter1.ValueSet.Add(this.valueset);
            this.parameter1.IsOptionDependent = true;

            var valueset2 = new ParameterValueSet(Guid.NewGuid(), null, this.uri)
            {
                ActualState = state2,
                Published   = published
            };

            this.parameter1.ValueSet.Add(valueset2);

            var row = new ParameterRowViewModel(this.parameter1, this.option, this.session.Object, null);

            Assert.AreEqual(this.nestedParameterPath, row.GetPath());

            var row2 = new ParameterTypeComponentRowViewModel(compoundtype.Component.First(), this.session.Object, null);

            Assert.AreEqual(string.Empty, row2.GetPath());

            var row3 = new ParameterTypeComponentRowViewModel(compoundtype.Component.First(), this.session.Object, row);

            Assert.AreEqual(this.nestedParameterPath, row3.GetPath());
        }
Exemple #11
0
        public void VerifyThatPropertiesArePopulatedForScalarPropertiesWithOption()
        {
            // **********************************************************************
            var published = new ValueArray <string>(new List <string> {
                "manual"
            }, this.valueset);
            var actual = new ValueArray <string>(new List <string> {
                "manual"
            }, this.valueset);

            this.valueset.Published   = published;
            this.valueset.Manual      = actual;
            this.valueset.ValueSwitch = ParameterSwitchKind.MANUAL;

            this.valueset.ActualOption = this.option;

            this.parameter1.ValueSet.Add(this.valueset);
            this.parameter1.IsOptionDependent = true;

            var valueset2 = new ParameterValueSet(Guid.NewGuid(), null, this.uri);

            this.parameter1.ValueSet.Add(valueset2);

            // **********************************************************************

            var row = new ParameterRowViewModel(this.parameter1, this.option, this.session.Object, null);

            Assert.IsFalse(row.IsPublishable);
            Assert.IsTrue(row.Value.Contains("manual"));
            Assert.IsNull(row.StateDependence);
            Assert.IsNull(row.MeasurementScale);
            Assert.AreEqual(0, row.ContainedRows.Count);
            Assert.AreEqual("domain", row.OwnerName);
            Assert.AreEqual("dom", row.OwnerShortName);
        }
        /// <summary>
        /// Update the <see cref="ParameterSubscription"/> associated to a <see cref="Parameter"/>
        /// </summary>
        /// <param name="parameter">The <see cref="Parameter"/></param>
        /// <param name="newValueSet">The new <see cref="ParameterValueSet"/></param>
        /// <param name="parameterSubscriptions">The <see cref="ParameterSubscription"/></param>
        /// <param name="defaultValueArray">The default value array</param>
        /// <param name="transaction">The current transaction</param>
        /// <param name="partition">The current partition</param>
        private void UpdateParameterSubscriptions(
            Parameter parameter,
            IEnumerable <ParameterValueSet> newValueSet,
            IEnumerable <ParameterSubscription> parameterSubscriptions,
            ValueArray <string> defaultValueArray,
            NpgsqlTransaction transaction,
            string partition)
        {
            var subscriptions = parameterSubscriptions.Where(x => parameter.ParameterSubscription.Contains(x.Iid))
                                .ToList();

            foreach (var parameterValueSet in newValueSet)
            {
                foreach (var parameterSubscription in subscriptions)
                {
                    var newSubscriptionValueSet =
                        this.ParameterSubscriptionValueSetFactory.CreateWithDefaultValueArray(
                            parameterValueSet.Iid,
                            defaultValueArray);
                    this.ParameterSubscriptionValueSetService.CreateConcept(
                        transaction,
                        partition,
                        newSubscriptionValueSet,
                        parameterSubscription);
                }
            }
        }
Exemple #13
0
        public void VerifyThatParameterTypeUpdatesAreHandled()
        {
            // **********************************************************************
            var published = new ValueArray <string>(new List <string> {
                "manual"
            }, this.valueset);
            var actual = new ValueArray <string>(new List <string> {
                "different"
            }, this.valueset);

            this.valueset.Published   = published;
            this.valueset.Manual      = actual;
            this.valueset.ValueSwitch = ParameterSwitchKind.MANUAL;

            this.parameter1.ValueSet.Add(this.valueset);
            // **********************************************************************

            var row = new ParameterRowViewModel(this.parameter1, this.option, this.session.Object, null);

            Assert.AreEqual("pt1", row.Name);
            Assert.IsTrue(row.Value.Contains("manual"));
            Assert.IsTrue(row.IsPublishable);
            Assert.IsNull(row.StateDependence);
            Assert.IsNull(row.MeasurementScale);
            Assert.AreEqual(0, row.ContainedRows.Count);
            Assert.AreEqual("domain", row.OwnerName);
            Assert.AreEqual("dom", row.OwnerShortName);

            this.parameterType1.Name           = "updatept1";
            this.parameterType1.RevisionNumber = 100;

            CDPMessageBus.Current.SendObjectChangeEvent(this.parameterType1, EventKind.Updated);

            Assert.AreEqual("updatept1", row.Name);
        }
        private void ConfirmSeed()
        {
            try
            {
                ConfirmSeedCommand.Executable = false;

                // When on testnet, allow clicking through the dialog without any validation.
                if (App.Current.ActiveNetwork == BlockChainIdentity.TestNet)
                {
                    if (Input.Length == 0)
                    {
                        _wizard.CurrentDialog = new PromptPassphrasesDialog(Wizard, _seed);
                        return;
                    }
                }

                var decodedSeed = WalletSeed.DecodeAndValidateUserInput(Input, _pgpWordList);
                if (ValueArray.ShallowEquals(_seed, decodedSeed))
                {
                    _wizard.CurrentDialog = new PromptPassphrasesDialog(Wizard, _seed);
                }
                else
                {
                    MessageBox.Show("Seed does not match");
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Invalid seed");
            }
            finally
            {
                ConfirmSeedCommand.Executable = true;
            }
        }
        /// <summary>
        /// Update the <see cref="ParameterSubscription"/> associated to a <see cref="Parameter"/>
        /// </summary>
        /// <param name="parameter">The <see cref="Parameter"/></param>
        /// <param name="newOldValueSet">The new <see cref="ParameterValueSet"/></param>
        /// <param name="parameterSubscriptions">The <see cref="ParameterSubscription"/></param>
        /// <param name="defaultValueArray">The default value array</param>
        /// <param name="transaction">The current transaction</param>
        /// <param name="partition">The current partition</param>
        /// <param name="securityContext">The security context</param>
        private void UpdateParameterSubscriptions(
            Parameter parameter,
            IReadOnlyDictionary <ParameterValueSet, ParameterValueSet> newOldValueSet,
            IEnumerable <ParameterSubscription> parameterSubscriptions,
            ValueArray <string> defaultValueArray,
            NpgsqlTransaction transaction,
            string partition,
            ISecurityContext securityContext)
        {
            var subscriptions = parameterSubscriptions.Where(x => parameter.ParameterSubscription.Contains(x.Iid))
                                .ToList();
            var subscriptionValueSets = this.ParameterSubscriptionValueSetService.GetShallow(transaction, partition, subscriptions.SelectMany(x => x.ValueSet), securityContext).
                                        Cast <ParameterSubscriptionValueSet>().ToList();

            foreach (var parameterValueSet in newOldValueSet)
            {
                foreach (var parameterSubscription in subscriptions)
                {
                    var oldSubscriptionValueSet = parameterValueSet.Value != null?subscriptionValueSets.FirstOrDefault(x => x.SubscribedValueSet == parameterValueSet.Value.Iid) : null;

                    var newSubscriptionValueSet =
                        this.ParameterSubscriptionValueSetFactory.CreateWithOldValues(
                            oldSubscriptionValueSet,
                            parameterValueSet.Key.Iid,
                            defaultValueArray);

                    this.ParameterSubscriptionValueSetService.CreateConcept(
                        transaction,
                        partition,
                        newSubscriptionValueSet,
                        parameterSubscription);
                }
            }
        }
Exemple #16
0
        /// <summary>
        /// Creates ParameterSubscriptionValueSets for the supplied ParameterValueSets.
        /// </summary>
        /// <param name="thing">
        ///     The <see cref="Thing"/> instance that will be inspected.
        /// </param>
        /// <param name="container">
        ///     The container instance of the <see cref="Thing"/> that is inspected.
        /// </param>
        /// <param name="transaction">
        ///     The current transaction to the database.
        /// </param>
        /// <param name="partition">
        ///     The database partition (schema) where the requested resource will be stored.
        /// </param>
        /// <param name="securityContext">
        ///     The security-context
        /// </param>
        private void CreateParameterSubscriptionValueSets(
            ParameterSubscription thing,
            Thing container,
            NpgsqlTransaction transaction,
            string partition,
            ISecurityContext securityContext)
        {
            if (!(container is CDP4Common.DTO.ParameterOrOverrideBase parameterOrOverrideBase))
            {
                throw new InvalidOperationException("The container of a ParameterSubscription can only be a ParameterOrOverrideBase.");
            }

            var parameterValueSets = parameterOrOverrideBase is CDP4Common.DTO.Parameter
                ? this.ParameterValueSetService.GetShallow(transaction, partition, parameterOrOverrideBase.ValueSets, securityContext).OfType <CDP4Common.DTO.ParameterValueSetBase>().ToArray()
                : this.ParameterOverrideValueSetService.GetShallow(transaction, partition, parameterOrOverrideBase.ValueSets, securityContext).OfType <CDP4Common.DTO.ParameterValueSetBase>().ToArray();

            foreach (var parameterValueSet in parameterValueSets)
            {
                var parameterSubscriptionValueSet =
                    new ParameterSubscriptionValueSet(Guid.NewGuid(), 0)
                {
                    SubscribedValueSet = parameterValueSet.Iid,
                    ValueSwitch        = ParameterSwitchKind.COMPUTED
                };

                var valueArray = new ValueArray <string>(this.DefaultValueArrayFactory.CreateDefaultValueArray(parameterValueSet.Manual.Count));
                parameterSubscriptionValueSet.Manual = valueArray;

                this.ParameterSubscriptionValueSetService.CreateConcept(
                    transaction,
                    partition,
                    parameterSubscriptionValueSet,
                    thing);
            }
        }
Exemple #17
0
        /// <summary>
        /// Set a ValueSet for a scalar ParameterType
        /// </summary>
        /// <param name="valueset">The <see cref="ParameterValueSetBase"/> to set</param>
        private void SetScalarValueSet(ParameterValueSetBase valueset)
        {
            var manualSet = new ValueArray <string>(new List <string> {
                "-"
            });
            var referenceSet = new ValueArray <string>(new List <string> {
                "-"
            });
            var computedSet = new ValueArray <string>(new List <string> {
                "-"
            });
            var publishedSet = new ValueArray <string>(new List <string> {
                "-"
            });
            var formulaSet = new ValueArray <string>(new List <string> {
                "-"
            });

            valueset.Manual      = manualSet;
            valueset.Reference   = referenceSet;
            valueset.Computed    = computedSet;
            valueset.Published   = publishedSet;
            valueset.Formula     = formulaSet;
            valueset.ValueSwitch = ParameterSwitchKind.REFERENCE;
        }
Exemple #18
0
        public void VerifyThatOnUpdateOfStateTheRowIsUpdated(IViewModelBase <Thing> container, string scenario)
        {
            // **************************INPUT***************************************
            var published = new ValueArray <string>(new List <string> {
                "manual"
            }, this.valueset);
            var actual = new ValueArray <string>(new List <string> {
                "different"
            }, this.valueset);

            this.valueset.Published    = published;
            this.valueset.Manual       = actual;
            this.valueset.ValueSwitch  = ParameterSwitchKind.MANUAL;
            this.valueset.ActualOption = this.option;
            this.valueset.ActualState  = this.state1;

            this.parameter1.ValueSet.Add(this.valueset);
            this.parameter1.IsOptionDependent = true;
            this.parameter1.StateDependence   = this.stateList;

            var valueset2 = new ParameterValueSet(Guid.NewGuid(), null, this.uri);

            this.parameter1.ValueSet.Add(valueset2);

            // **********************************************************************

            var row = new ParameterRowViewModel(this.parameter1, this.option, this.session.Object, container);

            Assert.AreEqual(1, row.ContainedRows.Count);
            this.state1.Kind = ActualFiniteStateKind.FORBIDDEN;
            CDPMessageBus.Current.SendObjectChangeEvent(this.state1, EventKind.Updated);
            Assert.AreEqual(0, row.ContainedRows.Count);
        }
Exemple #19
0
 /// <summary>
 /// Splits the valueset into chunks based on number of independent and dependent parametertype allocations
 /// </summary>
 /// <param name="values">The entire value array</param>
 /// <param name="nSize">The size of chunks to split into</param>
 /// <returns>An IEnumerable of the lists of chunks.</returns>
 private IEnumerable <List <string> > SplitValues(ValueArray <string> values, int nSize = 30)
 {
     for (var i = 0; i < values.Count; i += nSize)
     {
         yield return(values.ToList().GetRange(i, Math.Min(nSize, values.Count - i)));
     }
 }
Exemple #20
0
        /// <summary>
        /// Resolve the properties of the current <see cref="RelationalExpression"/> from its <see cref="DTO.Thing"/> counter-part
        /// </summary>
        /// <param name="dtoThing">The source <see cref="DTO.Thing"/></param>
        internal override void ResolveProperties(DTO.Thing dtoThing)
        {
            if (dtoThing == null)
            {
                throw new ArgumentNullException("dtoThing");
            }

            var dto = dtoThing as DTO.RelationalExpression;

            if (dto == null)
            {
                throw new InvalidOperationException(string.Format("The DTO type {0} does not match the type of the current RelationalExpression POCO.", dtoThing.GetType()));
            }

            this.ExcludedDomain.ResolveList(dto.ExcludedDomain, dto.IterationContainerId, this.Cache);
            this.ExcludedPerson.ResolveList(dto.ExcludedPerson, dto.IterationContainerId, this.Cache);
            this.ModifiedOn         = dto.ModifiedOn;
            this.ParameterType      = this.Cache.Get <ParameterType>(dto.ParameterType, dto.IterationContainerId) ?? SentinelThingProvider.GetSentinel <ParameterType>();
            this.RelationalOperator = dto.RelationalOperator;
            this.RevisionNumber     = dto.RevisionNumber;
            this.Scale           = (dto.Scale.HasValue) ? this.Cache.Get <MeasurementScale>(dto.Scale.Value, dto.IterationContainerId) : null;
            this.ThingPreference = dto.ThingPreference;
            this.Value           = new ValueArray <string>(dto.Value, this);

            this.ResolveExtraProperties();
        }
Exemple #21
0
 /// <summary>
 /// Add an entry to the value array only if it is an array type
 /// </summary>
 /// <param name="value"></param>
 public void AddToArray(VariableValue value)
 {
     if (ValueType == ValueDataType.ArrayType)
     {
         ValueArray.Add(value);
     }
 }
Exemple #22
0
        /// <summary>
        /// Асинхронно вызывает удаленный метод на стороне 1C:Предприятие и возвращает результат.
        /// </summary>
        /// <param name="имяМодуля">Имя модуля удаленного приложения 1С:Предприятие.</param>
        /// <param name="имяМетода">Имя метода (процедуры или функции).</param>
        /// <param name="параметры">Параметры метода.</param>
        /// <returns></returns>
        public async Task <object> ВызватьМетодАсинх(string имяМодуля, string имяМетода, object[] параметры)
        {
            ValueArray paramArray = ValueBase.From(параметры) as ValueArray;

            Task <ExecuteMethodResponse> task = this.SoapКлиент.ExecuteMethodAsync(имяМодуля, имяМетода, paramArray);

            return((await task)[email protected](this));
        }
 internal SubtractArray()
 {
     List<Value> list = new List<Value>();
     list.Add(PatternData.Single("a", ValueType.Int));
     list.Add(PatternData.Single("b", ValueType.Int));
     ValueArray array = new ValueArray(list);
     Init(array);
 }
Exemple #24
0
 public Chunk()
 {
     count     = 0;
     capacity  = 0;
     values    = null;
     lines     = new List <int>();
     constants = new ValueArray();
 }
Exemple #25
0
        public void VerifyCreateParameterOverride()
        {
            var vm             = new ProductTreeViewModel(this.option, this.session.Object, this.thingDialogNavigationService.Object, this.panelNavigationService.Object, this.dialogNavigationService.Object, null);
            var revisionNumber = typeof(Iteration).GetProperty("RevisionNumber");

            revisionNumber.SetValue(this.iteration, 50);
            var elementdef = new ElementDefinition(Guid.NewGuid(), this.assembler.Cache, this.uri)
            {
                Container = this.iteration
            };
            var boolParamType = new BooleanParameterType(Guid.NewGuid(), this.assembler.Cache, this.uri);
            var elementUsage  = new ElementUsage(Guid.NewGuid(), this.assembler.Cache, this.uri)
            {
                Container         = elementdef,
                ElementDefinition = elementdef
            };
            var parameter = new Parameter(Guid.NewGuid(), this.assembler.Cache, this.uri)
            {
                Owner = this.domain, Container = elementUsage, ParameterType = boolParamType
            };

            elementdef.Parameter.Add(parameter);
            var published = new ValueArray <string>(new List <string> {
                "published"
            });
            var paramValueSet = new ParameterValueSet(Guid.NewGuid(), this.assembler.Cache, this.uri)
            {
                Published   = published,
                Manual      = published,
                Computed    = published,
                ValueSwitch = ParameterSwitchKind.COMPUTED
            };

            parameter.ValueSet.Add(paramValueSet);

            var usageRow     = new ElementUsageRowViewModel(elementUsage, this.option, this.session.Object, null);
            var parameterRow = new ParameterRowViewModel(parameter, this.option, this.session.Object, usageRow);

            this.iteration.TopElement = elementdef;
            vm.SelectedThing          = parameterRow;

            Assert.IsTrue(vm.CreateOverrideCommand.CanExecute(null));

            vm.SelectedThing = null;
            vm.CreateOverrideCommand.Execute(null);
            this.session.Verify(x => x.Write(It.IsAny <OperationContainer>()), Times.Never);

            vm.SelectedThing = vm.TopElement.Single();
            vm.CreateOverrideCommand.Execute(null);
            this.session.Verify(x => x.Write(It.IsAny <OperationContainer>()), Times.Never);

            vm.SelectedThing = parameterRow;
            vm.CreateOverrideCommand.Execute(parameter);
            this.session.Verify(x => x.Write(It.IsAny <OperationContainer>()));

            vm.PopulateContextMenu();
            Assert.AreEqual(6, vm.ContextMenu.Count);
        }
Exemple #26
0
        private static IHeightMap GenerateRocks(int seed, int x, int y, double density)
        {
            CellularAutomaton ca = new CellularAutomaton(seed, new RuleSet(Lerp(0.1, 0.3, density), false, (region, generation) => region.GetNeighbors() > 2));

            IHeightMap layer1 = new BooleanMap(ca.Generate(x, y, 4));
            IHeightMap layer2 = new BooleanMap(ca.Generate(x, y, 2));

            return(new HeightMap(2, ValueArray.Create(x, y, (i, j) => layer1[i, j] + layer2[i, j])));
        }
 public void CopyFrom(ValueArray <T> array)
 {
     Clear();
     for (int i = 0; i < array.Count; i++)
     {
         T value = array[i];
         Add(ref value);
     }
 }
Exemple #28
0
 public void AddWorks()
 {
     _myArray = default;
     _myArray.Add(77);
     _myArray.Add(78);
     Assert.Equal(2, _myArray.Count);
     Assert.Equal(77, _myArray[0]);
     Assert.Equal(78, _myArray[1]);
 }
Exemple #29
0
        public void RemoveWorks()
        {
            _myArray = default;
            _myArray.Add(1);
            Assert.Single(_myArray);

            _myArray.Remove(1);
            Assert.Empty(_myArray);
        }
Exemple #30
0
        public void VerifyThatValueArrayToStringWorksWithStrings()
        {
            var array = new ValueArray <string>(new List <string> {
                "abc", "def", "3", "4.1"
            });
            var s = array.ToString();

            Assert.AreEqual("{\"abc\"; \"def\"; \"3\"; \"4.1\"}", s);
        }
Exemple #31
0
        public void VerifyThatValueArrayToStringWorks()
        {
            var array = new ValueArray <float>(new List <float> {
                1, 2, 3, 4.1f
            });
            var s = array.ToString();

            Assert.AreEqual("{1; 2; 3; 4.1}", s);
        }
        public void VerifyThatParametersArePlacedCorrectly()
        {
            var revision = typeof(ElementDefinition).GetProperty("RevisionNumber");

            // Test input
            var valueSet  = new ParameterValueSet(Guid.NewGuid(), this.cache, this.uri);
            var manualSet = new ValueArray <string>(new List <string> {
                "manual"
            });
            var referenceSet = new ValueArray <string>(new List <string> {
                "ref"
            });
            var computedSet = new ValueArray <string>(new List <string> {
                "computed"
            });
            var publishedSet = new ValueArray <string>(new List <string> {
                "published"
            });

            valueSet.Manual    = manualSet;
            valueSet.Reference = referenceSet;
            valueSet.Computed  = computedSet;
            valueSet.Published = publishedSet;

            this.parameter1.ValueSet.Add(valueSet);
            this.elementDefinition.Parameter.Add(this.parameter1);
            // **********

            var vm        = new ElementDefinitionRowViewModel(this.elementDefinition, this.activeDomain, this.session.Object, null, this.obfuscationService.Object);
            var group1Row = vm.ContainedRows.Single(x => x.Thing == this.parameterGroup1);
            var group3Row = group1Row.ContainedRows.Single();

            Assert.AreEqual(3, vm.ContainedRows.Count);

            // move parameter to group1
            revision.SetValue(this.parameter1, 1);
            this.parameter1.Group = this.parameterGroup1;
            CDPMessageBus.Current.SendObjectChangeEvent(this.parameter1, EventKind.Updated);
            Assert.AreEqual(2, vm.ContainedRows.Count);
            Assert.AreEqual(2, group1Row.ContainedRows.Count);

            // move parameter to group3
            revision.SetValue(this.parameter1, 2);
            this.parameter1.Group = this.parameterGroup3;
            CDPMessageBus.Current.SendObjectChangeEvent(this.parameter1, EventKind.Updated);
            Assert.AreEqual(2, vm.ContainedRows.Count);
            Assert.AreEqual(1, group1Row.ContainedRows.Count);
            Assert.AreEqual(1, group3Row.ContainedRows.Count);

            // move parameter to root
            revision.SetValue(this.parameter1, 3);
            this.parameter1.Group = null;
            CDPMessageBus.Current.SendObjectChangeEvent(this.parameter1, EventKind.Updated);
            Assert.AreEqual(3, vm.ContainedRows.Count);
            Assert.AreEqual(1, group1Row.ContainedRows.Count);
            Assert.AreEqual(0, group3Row.ContainedRows.Count);
        }
Exemple #33
0
 internal Add()
 {
     SetDocString("Return [0] + [1].");
     List<Value> list = new List<Value>();
     list.Add(PatternData.Single("a", ValueType.Number));
     list.Add(PatternData.Single("b", ValueType.Number));
     ValueArray array = new ValueArray(list);
     Init(array);
 }
Exemple #34
0
            internal IsAnyEqual()
            {
                SetDocString("If first element is equal to anything in second array, return true, else false.");

                List<Value> list = new List<Value>();
                list.Add(PatternData.Single("value"));
                list.Add(PatternData.Single("array", ValueType.Array));
                ValueArray array = new ValueArray(list);
                Init(array);
            }
Exemple #35
0
            internal IsEqual()
            {
                SetDocString("If both elements in array are equal, return true, else false.");

                List<Value> list = new List<Value>();
                list.Add(PatternData.Single("a"));
                list.Add(PatternData.Single("b"));
                ValueArray array = new ValueArray(list);
                Init(array);
            }
Exemple #36
0
        public void TestArrayParams()
        {
            ScopeChain scope = new ScopeChain();
            scope.SetValue("+", new TestSum());
            ValueDelimiter square = new ValueDelimiter("]", DelimiterType.AsArray);
            scope.SetValue("[", square);

            {	// create postfix function that takes [ a b ]
                List<Value> list = new List<Value>();
                list.Add(PatternData.Single("a", ValueType.Int));
                list.Add(PatternData.Single("b", ValueType.Int));
                ValueArray array = new ValueArray(list);

                List<string> body = new List<string>();
                body.Add("a + b");

                CreateFunction.Do(scope, "add", null, array, body);
            }
            {	// try out the function
                DelimiterList list = ParseLine.Do("add [ 2 5 ]", scope);
                Value value = EvalList.Do(list.Nodes, scope);
                Assert.AreEqual(7, value.AsInt);
            }
        }
Exemple #37
0
 internal Combine()
 {
     SetDocString("Concatenates two arrays or maps.");
     List<Value> list = new List<Value>();
     list.Add(PatternData.Single("a"));
     list.Add(PatternData.Single("b"));
     ValueArray array = new ValueArray(list);
     Init(array);
 }
 public override void DoRows(Parse rows)
 {
     memberNameCells = new CellRange(rows.Parts);
     rowWidth = rows.Parts.Size;
     valueCells = new ValueArray(RepeatString);
     base.DoRows(rows.More);
 }
Exemple #39
0
        /// <summary>
        /// Create an instance of LibraryModelProgram for a given assembly
        /// </summary>
        /// <param name="modAssembly">Loaded assembly</param>
        /// <param name="modelName">Name of the model namespace to be loaded. 
        /// Only classes in the model namespace will be loaded.</param>
        /// <param name="featureNames">The names of features to be loaded. If null, all
        /// features will be loaded for the given modelName. See <see cref="FeatureAttribute"/>.</param>
        /// <exception cref="ModelProgramUserException">Thrown if there is a usage error in the given assembly.</exception>
        public LibraryModelProgram(Assembly modAssembly, string modelName, Set<string>/*?*/ featureNames)
        {
            if (string.IsNullOrEmpty(modelName))
                throw new ArgumentNullException("modelName");

            InterpretationContext context = (null == featureNames ?
                new InterpretationContext() :
                new InterpretationContext(featureNames));

            Type/*?*/[]/*?*/ allTypes = modAssembly.GetTypes();
            List<Field> stateVars = new List<Field>();
            Dictionary<Symbol, ActionInfo> aInfoMap = new Dictionary<Symbol, ActionInfo>();
            Dictionary<Type, StatePredicate> acceptingStateConditions = new Dictionary<Type, StatePredicate>();
            Dictionary<Type, StatePredicate> stateInvariants = new Dictionary<Type, StatePredicate>();
            Dictionary<Type, StatePredicate> stateFilters = new Dictionary<Type, StatePredicate>();
            //Dictionary<Type, TransitionPropertyGenerator> transitionPropertyGenerators = new Dictionary<Type, TransitionPropertyGenerator>();
            bool modelIsEmpty = true;

            #region Get state variables, actions, invariants, accepting state conditions, and state filters

            abstractSorts = new Set<Symbol>();

            foreach (Type t in allTypes)
            {
                try
                {
                    // ignore any compiler-generated types, such as iterators.
                    if (ReflectionHelper.IsCompilerGenerated(t))
                        continue;

                    // Collect  state variables, actions, invariants and accepting state conditions.
                    if (ReflectionHelper.IsInModel(t, modelName, featureNames))
                    {
                        // Register the sort for this type
                        context.RegisterSortType(AbstractValue.TypeSort(t), t);

                        // Check if the sort is abstract
                        if (AbstractValue.IsTypeAbstractSort(t)) abstractSorts=abstractSorts.Add(AbstractValue.TypeSort(t));

                        // Only extract variables and actions from class types.
                        if (!t.IsClass)
                            continue;

                        // clear flag that detects model namespace spelling errors
                        modelIsEmpty = false;

                        // Collect state variables
                        foreach (FieldInfo field in ReflectionHelper.GetModelVariables(t))
                            stateVars.Add(new Field(field));

                        Set<string> actionMethodNames = Set<string>.EmptySet;  // used to detect duplicates

                        // Collect actions
                        foreach (MethodInfo methodInfo in ReflectionHelper.GetMethodsForActions(t))
                        {
                            try
                            {
                                if (actionMethodNames.Contains(methodInfo.Name))
                                    throw new ModelProgramUserException("Duplicate action method name '" + methodInfo.Name + "' found. Action methods may not use overloaded names.");

                                if (!methodInfo.IsStatic)
                                {
                                    //check that the the declaring class is a labeled instance
                                    //or else say that probably the static keyword is missing

                                    if (methodInfo.DeclaringType.BaseType == null ||
                                        methodInfo.DeclaringType.BaseType.Name != "LabeledInstance`1" ||
                                        methodInfo.DeclaringType.BaseType.GetGenericArguments()[0] != methodInfo.DeclaringType)
                                        throw new ModelProgramUserException("Since the action method '" + methodInfo.Name + "' is non-static, the class '" + methodInfo.DeclaringType.Name + "' must directly inherit from 'LabeledInstance<" + methodInfo.DeclaringType.Name + ">'." +
                                                                            "\nDid you perhaps forget to declare the method 'static'?");
                                }

                                //check that the action parameter types are valid modeling types
                                foreach (ParameterInfo pInfo in methodInfo.GetParameters())
                                        if (!(pInfo.ParameterType.IsPrimitive ||
                                             pInfo.ParameterType.IsEnum ||
                                             pInfo.ParameterType == typeof(string) ||
                                             ReflectionHelper.ImplementsIAbstractValue(pInfo.ParameterType)))
                                            throw new ModelProgramUserException(
                                                "\nThe parameter '" + pInfo.Name + "' of '" + methodInfo.Name + "' does not a have valid modeling type. " +
                                                "\nA valid modeling type is either: a primitive type, an enum, a string, or a type that implements 'NModel.Internals.IAbstractValue'." +
                                                "\nIn particular, collection types in 'System.Collections' and 'System.Collections.Generic' are not valid modeling types." +
                                                "\nValid modeling types are collection types like 'Set' and 'Map' defined in the 'NModel' namespace, " +
                                                "\nas well as user defined types that derive from 'CompoundValue'.");

                                actionMethodNames = actionMethodNames.Add(methodInfo.Name);

                                Method method = new Method(methodInfo);

                                #region RequirementsMetrics2

                                // Requirements metrics
                                // methodInfo is only actions
                                // Collect the requirements from the enabling-actions below (after this loop)
                                if (!allModeledRequirements.ContainsKey(methodInfo.Name))
                                    allModeledRequirements =
                                        allModeledRequirements.Add(methodInfo.Name,
                                        ReflectionHelper.GetRequirementsInMethod(methodInfo));

                                // Collect the requirements from the enabling-actions
                                foreach (MethodInfo enablingMethodInfo in ReflectionHelper.GetEnablingMethods(methodInfo))
                                {
                                    if (!allModeledRequirements.ContainsKey(enablingMethodInfo.Name))
                                    {
                                        Set<Pair<string, string>> requirements = new Set<Pair<string, string>>
                                            (ReflectionHelper.GetEnablingMethodsRequirements(enablingMethodInfo));
                                        allModeledRequirements =
                                            allModeledRequirements.Add(enablingMethodInfo.Name, requirements);
                                    }

                                }

                                #endregion

                                foreach (ActionAttribute actionAttribute in ReflectionHelper.GetModelActionAttributes(methodInfo))
                                {
                                    CompoundTerm/*?*/ startActionLabel;
                                    CompoundTerm/*?*/ finishActionLabel;
                                    ReflectionHelper.GetActionLabel(methodInfo, actionAttribute, out startActionLabel, out finishActionLabel);
                                    ActionMethodFinish/*?*/ finishActionMethod = null;
                                    if (finishActionLabel != null)
                                    {
                                        finishActionMethod = InsertActionMethodFinish(method, finishActionLabel, aInfoMap);
                                    }
                                    if (startActionLabel != null)
                                    {
                                        InsertActionMethodStart(method, startActionLabel, finishActionMethod, aInfoMap);
                                    }
                                }
                            }
                            catch (ModelProgramUserException e)
                            {
                                string msg = "method " + methodInfo.Name + ", " + e.Message;
                                throw new ModelProgramUserException(msg);
                            }
                        }

                        // to do: collect transition properties

                        // Collect state invariants
                        //StatePredicate sp1 = StatePredicate.GetPredicates(t, GetStateInvariantMethodNames(t));
                        //if (null != sp1)
                        //    stateInvariants.Add(t, sp1);

                        // Collect accepting state conditions
                        StatePredicate sp2 = StatePredicate.GetAcceptingStateCondition(t);
                        if (null != sp2)
                            acceptingStateConditions.Add(t, sp2);

                        // Collect state invariants
                        StatePredicate sp3 = StatePredicate.GetStateInvariant(t);
                        if (null != sp3)
                            stateInvariants.Add(t, sp3);

                        //collect state filters
                        StatePredicate sp4 = StatePredicate.GetStateFilter(t);
                        if (null != sp4)
                            stateFilters.Add(t, sp4);

                    }
                }
                catch (ModelProgramUserException e)
                {
                    string msg = "In class " + t.Name + ", " + e.Message;
                    throw new ModelProgramUserException(msg);
                }
            }

            if (modelIsEmpty)
                throw new ModelProgramUserException("No classes found in model namespace " + modelName + ". Did you misspell?");

            #endregion

            // todo: Collect "sorts" for each type. Walk type tree of state variables and
            // action arguments to do this.

            Symbol[] aSymbols = new Symbol[aInfoMap.Keys.Count];
            int j = 0;
            foreach (Symbol a in aInfoMap.Keys)
                aSymbols[j++] = a;

            Field[] sFields = stateVars.ToArray();
            StateVariable[] sVars = new StateVariable[sFields.Length];
            string[] lNames = new string[sVars.Length];
            ValueArray<string> locNames;
            for (int i = 0; i < sVars.Length; i++)
            {
                sVars[i] = sFields[i].stateVariable;
                lNames[i] = sFields[i].stateVariable.Name;
            }

            locNames = new ValueArray<string>(lNames);

            string nameExt = "";
            if (featureNames != null && featureNames.Count > 0)
            {
                nameExt += "[";
                for (int i = 0; i < featureNames.Count; i++)
                {
                    nameExt += featureNames.Choose(i);
                    if (i < featureNames.Count - 1)
                        nameExt += ",";
                }
                nameExt += "]";
            }

            this.name = modelName + nameExt;
            // this.generator = generator;
            this.stateFields = sFields;
            this.locationNames = locNames;
            this.stateVariables = sVars;
            this.actionSymbols = new Set<Symbol>(aSymbols);
            this.actionInfoMap = aInfoMap;
            this.finishActionSymbols = LibraryModelProgram.CreateStartFinishMap(aInfoMap);
            this.modelAssembly = modAssembly;
            this.context = context;
            this.currentState = GetInitialState();
            this.stateChangedPredicate = false;
            this.acceptingStateConditions = acceptingStateConditions;
            this.stateInvariants = stateInvariants;
            this.stateFilters = stateFilters;
        }
Exemple #40
0
        /// <summary>
        /// Evaluates a token, possibly requesting the previous and next values.
        /// Returns a value.
        /// </summary>
        /// <param name="token">token representing a function or variable</param>
        /// <param name="scope">used to request functions, variables, and delimiters if there's no scope attached to the node</param>
        /// <param name="nodes">used to request previous and next nodes</param>
        internal static Value Do(DelimiterNode node, IScope scope, INodeRequestor nodes, ILineRequestor requestor)
        {
            if (node.Value != null)
            {	// node has already been evaluated
                return node.Value;
            }
            else if (node.Token != null)
            {	// function/variable or built-in
                Token token = node.Token;
                Value value = scope.GetValue(token);
                if (value is ValueFunction && nodes != null)
                {
                    ValueFunction function = value as ValueFunction;
                    // get previous & next nodes if needed
                    DelimiterNode previous = (function.ConsumesPrevious ? nodes.GetPrevious() : null);
                    DelimiterNode next = (function.ConsumesNext ? nodes.GetNext() : null);

                    scope.FunctionName = token.Value;

                    // evaluate
                    try
                    {
                        return function.Eval(previous, next, scope, scope, nodes, requestor);
                    }
                    catch (Loki3Exception e)
                    {	// this function is the correct context if there isn't already one there
                        if (!e.Errors.ContainsKey(Loki3Exception.keyFunction))
                            e.AddFunction(token.Value);
                        if (!e.Errors.ContainsKey(Loki3Exception.keyScope))
                            e.AddScope(scope);
                        throw e;
                    }
                }
                else if (value != null)
                {
                    return value;
                }
                else
                {
                    return EvalBuiltin.Do(token);
                }
            }
            else if (node.List != null)
            {	// delimited list of nodes
                Value value = null;
                DelimiterList list = node.List;
                IScope listScope = (list.Scope != null ? list.Scope : scope);
                DelimiterType type = list.Delimiter.DelimiterType;

                // get contents as a Value
                switch (type)
                {
                    case DelimiterType.AsString:
                        value = new ValueString(list.Original);
                        break;
                    case DelimiterType.AsValue:
                        value = EvalList.Do(list.Nodes, listScope);
                        break;
                    case DelimiterType.AsArray:
                        List<Value> values = new List<Value>(list.Nodes.Count);
                        foreach (DelimiterNode subnode in list.Nodes)
                        {	// note: 'nodes' is null so functions don't get evaled
                            Value subvalue = Do(subnode, listScope, null, requestor);
                            values.Add(subvalue);
                        }
                        value = new ValueArray(values);
                        break;
                    case DelimiterType.AsEvaledArray:
                        value = EvalList.DoEvaledArray(list.Nodes, listScope);
                        break;
                    case DelimiterType.AsRaw:
                        value = new ValueRaw(list, listScope);
                        break;
                    case DelimiterType.AsArrayOfRaw:
                        List<Value> rawvalues = new List<Value>(list.Nodes.Count);
                        foreach (DelimiterNode subnode in list.Nodes)
                            rawvalues.Add(new ValueRaw(subnode, listScope));
                        value = new ValueArray(rawvalues);
                        break;
                }

                // run contents through a function if specified
                ValueFunction function = list.Delimiter.Function;
                if (function == null)
                    return value;
                DelimiterNode next = new DelimiterNodeValue(value);
                return function.Eval(null, next, scope, scope, nodes, requestor);
            }
            return new ValueNil();
        }
Exemple #41
0
            internal LogicalOr()
            {
                SetDocString("Return true if either value in array are true.");

                List<Value> list = new List<Value>();
                list.Add(PatternData.Single("a", ValueType.Bool));
                list.Add(PatternData.Single("b", ValueType.Raw));
                ValueArray array = new ValueArray(list);
                Init(array);
            }
Exemple #42
0
 /// <summary>Parameter that's a single named value that's one of a set of options</summary>
 internal static Value Single(string name, ValueArray oneOf)
 {
     ValueString vName = new ValueString(name);
     PatternData data = new PatternData(vName);
     data.OneOf = oneOf;
     return vName;
 }
        // Returns the number of methods newly added to the dictionary.
        private bool AddMethodsOverwriteExisting(
            MemberInfo/*!*/[]/*!*/ newOverloads, RubyMethodGroupInfo/*!*/[] overloadOwners) {

            bool anyChange = false;
            for (int i = 0; i < newOverloads.Length; i++) {
                var method = (MethodBase)newOverloads[i];
                if (IsVisible(method)) {
                    var paramTypes = new ValueArray<Type>(ReflectionUtils.GetParameterTypes(method.GetParameters()));
                    if (_allMethods == null) {
                        _allMethods = new Dictionary<ValueArray<Type>, ClrOverloadInfo>();
                    }

                    _allMethods[paramTypes] = new ClrOverloadInfo {
                        Overload = method,
                        Owner = (overloadOwners != null) ? overloadOwners[i] : null
                    };

                    anyChange = true;
                }
            }
            return anyChange;
        }
Exemple #44
0
        public void TestArray()
        {
            List<Value> list = new List<Value>();
            list.Add(PatternData.Single("a", ValueType.Int));
            list.Add(PatternData.Single("b", ValueType.String));
            ValueArray pattern = new ValueArray(list);
            Value match = null, leftover = null;

            {	// single object - not a match
                Value input = new ValueInt(37);
                Assert.IsFalse(PatternChecker.Do(input, pattern, false/*bShortPat*/, out match, out leftover));
            }

            {	// array with one item - match with leftover
                List<Value> one = new List<Value>();
                one.Add(new ValueInt(5));
                ValueArray input = new ValueArray(one);

                Assert.IsTrue(PatternChecker.Do(input, pattern, false/*bShortPat*/, out match, out leftover));
                Assert.AreEqual(1, match.AsArray.Count);
                Assert.AreEqual(5, match.AsArray[0].AsInt);
                Assert.AreEqual(1, leftover.AsArray.Count);
                Assert.AreEqual("b", leftover.AsArray[0].AsString);
            }

            {	// array with two items of proper type - match
                List<Value> two = new List<Value>();
                two.Add(new ValueInt(5));
                two.Add(new ValueString("hello"));
                ValueArray input = new ValueArray(two);

                Assert.IsTrue(PatternChecker.Do(input, pattern, false/*bShortPat*/, out match, out leftover));
                Assert.AreEqual(2, match.AsArray.Count);
                Assert.AreEqual(5, match.AsArray[0].AsInt);
                Assert.AreEqual("hello", match.AsArray[1].AsString);
                Assert.AreEqual(null, leftover);
            }

            {	// array with two items of wrong type - not a match
                List<Value> two = new List<Value>();
                two.Add(new ValueInt(5));
                two.Add(new ValueFloat(2.718));
                ValueArray input = new ValueArray(two);

                Assert.IsFalse(PatternChecker.Do(input, pattern, false/*bShortPat*/, out match, out leftover));
            }

            {	// array with three items - not a match
                List<Value> three = new List<Value>();
                three.Add(new ValueInt(5));
                three.Add(new ValueString("hello"));
                three.Add(new ValueString("goodbye"));
                ValueArray input = new ValueArray(three);

                Assert.IsFalse(PatternChecker.Do(input, pattern, false/*bShortPat*/, out match, out leftover));
            }

            {	// array with three items & smaller pattern is allowed
                List<Value> three = new List<Value>();
                three.Add(new ValueInt(5));
                three.Add(new ValueString("hello"));
                three.Add(new ValueString("goodbye"));
                ValueArray input = new ValueArray(three);

                Assert.IsTrue(PatternChecker.Do(input, pattern, true/*bShortPat*/, out match, out leftover));
                Assert.AreEqual(2, match.AsArray.Count);
                Assert.AreEqual(5, match.AsArray[0].AsInt);
                Assert.AreEqual("hello", match.AsArray[1].AsString);
                Assert.AreEqual(null, leftover);
            }
        }
Exemple #45
0
        public void TestMapFromArrayPattern()
        {
            List<Value> list = new List<Value>();
            list.Add(PatternData.Single("a", ValueType.Int));
            list.Add(PatternData.Single("b", new ValueInt(17)));
            ValueArray pattern = new ValueArray(list);
            Value match = null, leftover = null;

            {	// get a & b
                Map map = new Map();
                map["a"] = new ValueInt(42);
                map["b"] = new ValueInt(31);
                ValueMap input = new ValueMap(map);

                Assert.IsTrue(PatternChecker.Do(input, pattern, false/*bShortPat*/, out match, out leftover));
                Assert.AreEqual(2, match.AsMap.Count);
                Assert.AreEqual(42, match.AsMap["a"].AsInt);
                Assert.AreEqual(31, match.AsMap["b"].AsInt);
                Assert.AreEqual(null, leftover);
            }

            {	// fill in default for b
                Map map = new Map();
                map["a"] = new ValueInt(42);
                ValueMap input = new ValueMap(map);

                Assert.IsTrue(PatternChecker.Do(input, pattern, false/*bShortPat*/, out match, out leftover));
                Assert.AreEqual(2, match.AsMap.Count);
                Assert.AreEqual(42, match.AsMap["a"].AsInt);
                Assert.AreEqual(17, match.AsMap["b"].AsInt);
                Assert.AreEqual(null, leftover);
            }

            {	// leftover
                Map map = new Map();
                map["b"] = new ValueInt(31);
                ValueMap input = new ValueMap(map);

                Assert.IsTrue(PatternChecker.Do(input, pattern, false/*bShortPat*/, out match, out leftover));
                Assert.AreEqual(1, match.AsMap.Count);
                Assert.AreEqual(31, match.AsMap["b"].AsInt);
                Assert.AreEqual(1, leftover.AsMap.Count);
                Assert.AreEqual("a", leftover.AsMap["a"].AsString);
            }

            {	// get a & b, ignore c because bShortPat=true
                Map map = new Map();
                map["a"] = new ValueInt(42);
                map["b"] = new ValueInt(31);
                map["c"] = new ValueInt(31);
                ValueMap input = new ValueMap(map);

                Assert.IsTrue(PatternChecker.Do(input, pattern, true/*bShortPat*/, out match, out leftover));
                Assert.AreEqual(2, match.AsMap.Count);
                Assert.AreEqual(42, match.AsMap["a"].AsInt);
                Assert.AreEqual(31, match.AsMap["b"].AsInt);
                Assert.AreEqual(null, leftover);
            }

            {	// missing key
                List<Value> list2 = new List<Value>();
                list2.Add(PatternData.Single("a", ValueType.Int));
                list2.Add(PatternData.Rest("other"));
                ValueArray pattern2 = new ValueArray(list2);

                Map map = new Map();
                map["b"] = new ValueInt(31);
                map["c"] = new ValueInt(31);
                ValueMap input = new ValueMap(map);
                Assert.IsFalse(PatternChecker.Do(input, pattern2, true/*bShortPat*/, out match, out leftover));

                // but if "a" is present, it matches
                map["a"] = new ValueInt(42);
                Assert.IsTrue(PatternChecker.Do(input, pattern2, true/*bShortPat*/, out match, out leftover));
            }
        }
Exemple #46
0
        public void TestRestOfArray()
        {
            List<Value> list = new List<Value>();
            list.Add(PatternData.Single("a", ValueType.Int));
            list.Add(PatternData.Rest("b"));
            ValueArray pattern = new ValueArray(list);
            Value match = null, leftover = null;

            {	// array with one item - remainder is empty
                List<Value> one = new List<Value>();
                one.Add(new ValueInt(5));
                ValueArray input = new ValueArray(one);

                Assert.IsTrue(PatternChecker.Do(input, pattern, false/*bShortPat*/, out match, out leftover));
                Assert.AreEqual(2, match.AsArray.Count);
                Assert.AreEqual(5, match.AsArray[0].AsInt);
                List<Value> rest = match.AsArray[1].AsArray;
                Assert.AreEqual(0, rest.Count);
                Assert.AreEqual(null, leftover);
            }

            {	// array with two items of proper type - single remainder
                List<Value> two = new List<Value>();
                two.Add(new ValueInt(5));
                two.Add(new ValueString("hello"));
                ValueArray input = new ValueArray(two);

                Assert.IsTrue(PatternChecker.Do(input, pattern, false/*bShortPat*/, out match, out leftover));
                Assert.AreEqual(2, match.AsArray.Count);
                Assert.AreEqual(5, match.AsArray[0].AsInt);
                List<Value> rest = match.AsArray[1].AsArray;
                Assert.AreEqual(1, rest.Count);
                Assert.AreEqual("hello", rest[0].AsString);
                Assert.AreEqual(null, leftover);
            }

            {	// array with three items of proper type - two items in remainder
                List<Value> three = new List<Value>();
                three.Add(new ValueInt(5));
                three.Add(new ValueString("hello"));
                three.Add(new ValueInt(7));
                ValueArray input = new ValueArray(three);

                Assert.IsTrue(PatternChecker.Do(input, pattern, false/*bShortPat*/, out match, out leftover));
                Assert.AreEqual(2, match.AsArray.Count);
                Assert.AreEqual(5, match.AsArray[0].AsInt);
                List<Value> rest = match.AsArray[1].AsArray;
                Assert.AreEqual(2, rest.Count);
                Assert.AreEqual("hello", rest[0].AsString);
                Assert.AreEqual(7, rest[1].AsInt);
                Assert.AreEqual(null, leftover);
            }
        }
Exemple #47
0
        public void TestArrayDefault()
        {
            List<Value> list = new List<Value>();
            list.Add(PatternData.Single("a", ValueType.Int));
            list.Add(PatternData.Single("b", new ValueInt(17)));
            ValueArray pattern = new ValueArray(list);
            Value match = null, leftover = null;

            {	// single object - not a match
                Value input = new ValueInt(37);
                Assert.IsFalse(PatternChecker.Do(input, pattern, false/*bShortPat*/, out match, out leftover));
            }

            {	// array with one item - match with default added
                List<Value> one = new List<Value>();
                one.Add(new ValueInt(5));
                ValueArray input = new ValueArray(one);

                Assert.IsTrue(PatternChecker.Do(input, pattern, false/*bShortPat*/, out match, out leftover));
                Assert.AreEqual(2, match.AsArray.Count);
                Assert.AreEqual(5, match.AsArray[0].AsInt);
                Assert.AreEqual(17, match.AsArray[1].AsInt);
                Assert.AreEqual(null, leftover);
            }

            {	// array with two items of proper type - match
                List<Value> two = new List<Value>();
                two.Add(new ValueInt(5));
                two.Add(new ValueString("hello"));
                ValueArray input = new ValueArray(two);

                Assert.IsTrue(PatternChecker.Do(input, pattern, false/*bShortPat*/, out match, out leftover));
                Assert.AreEqual(2, match.AsArray.Count);
                Assert.AreEqual(5, match.AsArray[0].AsInt);
                Assert.AreEqual("hello", match.AsArray[1].AsString);
                Assert.AreEqual(null, leftover);
            }
        }
Exemple #48
0
        public void TestArrayOneOf()
        {
            // passed value must be a member of this list
            List<Value> options = new List<Value>();
            options.Add(new ValueInt(5));
            options.Add(new ValueInt(6));
            ValueArray oneOf = new ValueArray(options);

            List<Value> list = new List<Value>();
            list.Add(PatternData.Single("a", oneOf));
            ValueArray pattern = new ValueArray(list);
            Value match = null, leftover = null;

            {	// single object that's not a match
                Value input = new ValueInt(4);
                Assert.IsFalse(PatternChecker.Do(input, pattern, false/*bShortPat*/, out match, out leftover));
            }

            {	// array with one item that matches one of the options
                List<Value> one = new List<Value>();
                one.Add(new ValueInt(6));
                ValueArray input = new ValueArray(one);

                Assert.IsTrue(PatternChecker.Do(input, pattern, false/*bShortPat*/, out match, out leftover));
                Assert.AreEqual(1, match.AsArray.Count);
                Assert.AreEqual(6, match.AsArray[0].AsInt);
                Assert.AreEqual(null, leftover);
            }
        }
Exemple #49
0
            internal LogicalAnd()
            {
                SetDocString("Return true only if both values of array are true.");

                List<Value> list = new List<Value>();
                list.Add(PatternData.Single("a", ValueType.Bool));
                list.Add(PatternData.Single("b", ValueType.Raw));
                ValueArray array = new ValueArray(list);
                Init(array);
            }