public void add_whenLinked(IDeque <SimpleLinkedValue> deque)
        {
            var sizeBefore = ((ICollection)deque).Count;

            deque.Add(deque.Peek());
            Assert.That(deque, HasCount(sizeBefore));
        }
Ejemplo n.º 2
0
 private Deque(Dequelette left, IDeque <Dequelette> middle, Dequelette right, System.Int64 count) : this()
 {
     if (count <= 0)
     {
         throw new System.ArgumentOutOfRangeException("count", "count must be positive.");
     }
     else if (null == right)
     {
         throw new System.ArgumentNullException("right");
     }
     else if (null == left)
     {
         throw new System.ArgumentNullException("left");
     }
     myLeft       = left;
     myMiddle     = middle ?? Deque <Dequelette> .Empty;
     myRight      = right;
     myLongCount  = count;
     myShortCount = (System.Int32)System.Math.Min((System.Int64)System.Int32.MaxValue, myLongCount);
     unchecked {
         myHashCode += left.GetHashCode();
         myHashCode += myMiddle.GetHashCode();
         myHashCode += right.GetHashCode();
     }
 }
        public override void Assign(object value, IGraphProcessingEnvironment procEnv)
        {
            object container = DestVar.GetVariableValue(procEnv);
            object key       = KeyExpression.Evaluate(procEnv);

            if (container is IList)
            {
                IList array = (IList)container;
                if (array.Count > (int)key)
                {
                    array[(int)key] = value;
                }
            }
            else if (container is IDeque)
            {
                IDeque deque = (IDeque)container;
                if (deque.Count > (int)key)
                {
                    deque[(int)key] = value;
                }
            }
            else
            {
                IDictionary map = (IDictionary)container;
                if (map.Contains(key))
                {
                    map[key] = value;
                }
            }
        }
Ejemplo n.º 4
0
        private static void AppendDeque(StringBuilder sb, IDeque deque, AttributeType attrValueType, IGraph graph)
        {
            bool first = true;

            foreach (Object entry in deque)
            {
                if (first)
                {
                    first = false;
                }
                else
                {
                    sb.Append(",");
                }

                if (attrValueType != null)
                {
                    sb.Append(ToString(entry, attrValueType, graph));
                }
                else
                {
                    sb.Append(ToStringAutomatic(entry, graph));
                }
            }
        }
Ejemplo n.º 5
0
        private void DequeOperations(IDeque <string> deque)
        {
            var lastPrepend = string.Empty;
            var lastAppend  = string.Empty;
            var testNumber  = 10000;

            for (var i = 0; i < testNumber; i++)
            {
                lastPrepend = Guid.NewGuid().ToString();
                lastAppend  = Guid.NewGuid().ToString();
                deque.Prepend(lastPrepend);
                deque.Append(lastAppend);
            }
            Assert.Equal(testNumber * 2, deque.Count);
            Assert.Equal(lastPrepend, deque.First);
            Assert.Equal(lastAppend, deque.Last);
            Assert.Equal(lastPrepend, deque.Shift());
            Assert.Equal(testNumber * 2 - 1, deque.Count);
            Assert.Equal(lastAppend, deque.Pop());
            Assert.Equal(testNumber * 2 - 2, deque.Count);

            for (var i = 0; i < (testNumber * 2 - 2); i++)
            {
                Assert.False(string.IsNullOrEmpty(deque.Pop()));
            }
            Assert.Equal(0, deque.Count);
        }
 /// <summary>
 /// Returns an <see cref="IEnumerable{T}"/> of Dequeued Items from the Front of the
 /// <paramref name="deque"/>. The returned items will be in
 /// <see cref="IDeque{T}.DequeueFront"/> order and there may be as many as up to
 /// <paramref name="count"/> items.
 /// </summary>
 /// <typeparam name="T"></typeparam>
 /// <param name="deque"></param>
 /// <param name="count"></param>
 /// <returns></returns>
 public static IEnumerable <T> DequeueFrontMany <T>(this IDeque <T> deque, int count = 1)
 {
     while (count-- > 0 && deque.Count > 0)
     {
         yield return(deque.DequeueFront());
     }
 }
Ejemplo n.º 7
0
 public Gesture(GestureGenerator.State state, GestureGenerator.EventType eventType, DateTime startTime, IDeque<SensorData> dataSinceGestureStart)
 {
     DataSinceGestureStart = dataSinceGestureStart;
     StartTime = startTime;
     State = state;
     EventType = eventType;
 }
Ejemplo n.º 8
0
        public override void Assign(object value, IGraphProcessingEnvironment procEnv)
        {
            IGraphElement elem = (IGraphElement)DestVar.GetVariableValue(procEnv);
            object container = elem.GetAttribute(AttributeName);
            object key = KeyExpression.Evaluate(procEnv);
            AttributeType attrType = elem.Type.GetAttributeType(AttributeName);

            BaseGraph.ChangingAttributeAssignElement(procEnv.Graph, elem, attrType, value, key);

            if(container is IList)
            {
                IList array = (IList)container;
                array[(int)key] = value;
            }
            else if(container is IDeque)
            {
                IDeque deque = (IDeque)container;
                deque[(int)key] = value;
            }
            else
            {
                IDictionary map = (IDictionary)container;
                map[key] = value;
            }

            BaseGraph.ChangedAttribute(procEnv.Graph, elem, attrType);
        }
Ejemplo n.º 9
0
 private void DequeExceptions(IDeque <int> deque)
 {
     Assert.Throws(typeof(InvalidOperationException), () => deque.Pop());
     Assert.Throws(typeof(InvalidOperationException), () => deque.Shift());
     Assert.Throws(typeof(InvalidOperationException), () => deque.First);
     Assert.Throws(typeof(InvalidOperationException), () => deque.Last);
 }
Ejemplo n.º 10
0
        private void DequeEnumerator(IDeque <int> deque)
        {
            var cursor1 = 0;

            foreach (var item in deque)
            {
                cursor1++;
            }
            Assert.Equal(0, cursor1);

            for (var i = 0; i < 100000; i++)
            {
                deque.Append(i);
            }
            var cursor2 = 0;

            foreach (var item in deque)
            {
                Assert.Equal(cursor2, item);
                cursor2++;
            }
            for (var i = 1; i < 100001; i++)
            {
                deque.Prepend(-i);
            }
            var cursor3 = -100000;

            foreach (var item in deque)
            {
                Assert.Equal(cursor3, item);
                cursor3++;
            }
        }
Ejemplo n.º 11
0
 /// <summary>
 /// Returns a string representation of the given Deque
 /// </summary>
 /// <param name="deque">The Deque of which to get the string representation</param>
 /// <param name="graph">The graph with the model and the element names if available, otherwise null</param>
 /// <returns>string representation of Deque</returns>
 public static string ToString(IDeque deque, IGraph graph)
 {
     string type;
     string content;
     ToString(deque, out type, out content, null, graph);
     return content;
 }
Ejemplo n.º 12
0
 public static bool NotEqualIDeque(IDeque a, IDeque b)
 {
     if (a == null || b == null)
     {
         if (a == null && b == null)
         {
             return(false);
         }
         else
         {
             return(true);
         }
     }
     if (a.Count != b.Count)
     {
         return(true);
     }
     if (LessOrEqualIDeque(a, b))
     {
         return(false);
     }
     else
     {
         return(true);
     }
 }
Ejemplo n.º 13
0
        private static void AppendDeque(StringBuilder sb, IDeque deque, AttributeType attrValueType, IGraph graph,
                                        bool firstLevelObjectEmitted, IDictionary <string, IObject> nameToObject, IGraphProcessingEnvironment procEnv)
        {
            bool first = true;

            foreach (object entry in deque)
            {
                if (first)
                {
                    first = false;
                }
                else
                {
                    sb.Append(",");
                }

                if (attrValueType != null)
                {
                    sb.Append(ToString(entry, attrValueType, graph, firstLevelObjectEmitted, nameToObject, procEnv));
                }
                else
                {
                    sb.Append(ToStringAutomatic(entry, graph, firstLevelObjectEmitted, nameToObject, procEnv));
                }
            }
        }
Ejemplo n.º 14
0
        /// <summary>
        /// Returns a string representation of the given Deque
        /// </summary>
        /// <param name="deque">The Deque of which to get the string representation</param>
        /// <param name="type">The type as string, e.g deque<int></param>
        /// <param name="content">The content as string, e.g. ] 42, 43 [</param>
        /// <param name="attrType">The attribute type of the deque if available, otherwise null</param>
        /// <param name="graph">The graph with the model and the element names if available, otherwise null</param>
        /// <param name="firstLevelObjectEmitted">Prevents emitting of further objects and thus infinite regressions</param>
        /// <param name="nameToObject">If not null, the names of visited objects are added</param>
        /// <param name="procEnv">If not null, the processing environment is used for transient object unique id emitting and fetching</param>
        public static void ToString(IDeque deque, out string type, out string content,
                                    AttributeType attrType, IGraph graph, bool firstLevelObjectEmitted,
                                    IDictionary <string, IObject> nameToObject, IGraphProcessingEnvironment procEnv)
        {
            Type valueType;

            ContainerHelper.GetDequeType(deque, out valueType);

            StringBuilder sb = new StringBuilder(256);

            sb.Append("]");

            AttributeType attrValueType = attrType != null ? attrType.ValueType : null;

            if (deque != null)
            {
                type = "deque<" + valueType.Name + ">";
                AppendDeque(sb, deque, attrValueType, graph, firstLevelObjectEmitted, nameToObject, procEnv);
            }
            else
            {
                type = "<INVALID>";
            }

            sb.Append("[");
            content = sb.ToString();
        }
 /// <summary>
 /// Returns an <see cref="IEnumerable{T}"/> of Dequeued Items from the Back of the
 /// <paramref name="deque"/>. The returned items will be in
 /// <see cref="Generic.IDeque{T}.DequeueBack"/> order and there may be as many as
 /// up to <paramref name="count"/> items.
 /// </summary>
 /// <param name="deque"></param>
 /// <param name="count"></param>
 /// <returns></returns>
 public static IEnumerable <object> DequeueBackMany(this IDeque deque, int count = 1)
 {
     while (count-- > 0 && deque.Count > 0)
     {
         yield return(deque.DequeueBack());
     }
 }
Ejemplo n.º 16
0
        /// <summary>
        /// Returns a string representation of the given Deque
        /// </summary>
        /// <param name="deque">The Deque of which to get the string representation</param>
        /// <param name="type">The type as string, e.g deque<int></param>
        /// <param name="content">The content as string, e.g. ] 42, 43 [</param>
        /// <param name="attrType">The attribute type of the deque if available, otherwise null</param>
        /// <param name="graph">The graph with the model and the element names if available, otherwise null</param>
        public static void ToString(IDeque deque, out string type, out string content,
                                    AttributeType attrType, IGraph graph)
        {
            Type valueType;

            ContainerHelper.GetDequeType(deque, out valueType);

            StringBuilder sb = new StringBuilder(256);

            sb.Append("]");

            AttributeType attrValueType = attrType != null ? attrType.ValueType : null;

            if (deque != null)
            {
                type = "deque<" + valueType.Name + ">";
                AppendDeque(sb, deque, attrValueType, graph);
            }
            else
            {
                type = "<INVALID>";
            }

            sb.Append("[");
            content = sb.ToString();
        }
Ejemplo n.º 17
0
 /// <summary>
 /// Creates a shallow clone of the given container.
 /// </summary>
 /// <param name="oldContainer">The container to clone.</param>
 /// <returns>A shallow clone of the container</returns>
 public static object Clone(object oldContainer)
 {
     if (oldContainer is IDictionary)
     {
         Type        keyType, valueType;
         IDictionary dict = ContainerHelper.GetDictionaryTypes(
             oldContainer, out keyType, out valueType);
         return(NewDictionary(keyType, valueType, oldContainer));
     }
     else if (oldContainer is IList)
     {
         Type  valueType;
         IList array = ContainerHelper.GetListType(
             oldContainer, out valueType);
         return(NewList(valueType, oldContainer));
     }
     else if (oldContainer is IDeque)
     {
         Type   valueType;
         IDeque deque = ContainerHelper.GetDequeType(
             oldContainer, out valueType);
         return(NewDeque(valueType, oldContainer));
     }
     return(null); // no known container type
 }
Ejemplo n.º 18
0
        static bool TestDeque(IDeque <int> deque, int n)
        {
            if (deque.Size != 0)
            {
                return(false);
            }
            for (int i = 0; i < n; i++)
            {
                deque.Prepend(i);
                deque.Append(i);
                deque.RemoveFirst();
            }

            if (deque.Size != n)
            {
                return(false);
            }
            if (n > 0 && (deque.First != 0 || deque.Last != n - 1))
            {
                return(false);
            }
            int elem = -1;

            for (int i = 0; i < n; i++)
            {
                elem = deque.RemoveLast();
            }
            if (deque.Size != 0 || elem != 0)
            {
                return(false);
            }
            return(true);
        }
Ejemplo n.º 19
0
        private void HighlightDeque(IDeque value, string name, bool addAnnotation)
        {
            int    distanceToTop = 0;
            object prevElem      = null;

            foreach (object elem in value)
            {
                if (elem is IGraphElement)
                {
                    HighlightSingleValue(elem, name + "@" + distanceToTop, addAnnotation);
                }
                if (elem is INode && distanceToTop >= 1)
                {
                    if (addAnnotation)
                    {
                        ycompClient.AddEdge(name + distanceToTop, name + "[->]", (INode)prevElem, (INode)elem);
                    }
                    else
                    {
                        ycompClient.DeleteEdge(name + distanceToTop);
                    }
                }
                prevElem = elem;
                ++distanceToTop;
            }
        }
        public void add_whenEmpty(IDeque <SimpleLinkedValue> deque)
        {
            SimpleLinkedValue value = new SimpleLinkedValue(1);

            deque.Add(value);
            Assert.That(deque.Peek(), Is.SameAs(value));
            Assert.That(deque, HasCount(1));
        }
Ejemplo n.º 21
0
        /// <summary>
        /// Returns a string representation of the given Deque
        /// </summary>
        /// <param name="deque">The Deque of which to get the string representation</param>
        /// <param name="graph">The graph with the model and the element names if available, otherwise null</param>
        /// <returns>string representation of Deque</returns>
        public static string ToString(IDeque deque, IGraph graph)
        {
            string type;
            string content;

            ToString(deque, out type, out content, null, graph);
            return(content);
        }
        public void removeElement_whenFound(IDeque <SimpleLinkedValue> deque)
        {
            SimpleLinkedValue first = deque.Peek();

            Assert.That(deque.Remove(first), Is.True);
            Assert.That(deque, HasCount((int)Capacity() - 1));
            Assert.That(deque.Contains(first), Is.False);
        }
        public void add_whenPopulated(IDeque <SimpleLinkedValue> deque)
        {
            SimpleLinkedValue value = new SimpleLinkedValue((int)Capacity());

            deque.Add(value);
            Assert.That(deque.Peek(), Is.Not.SameAs(value));
            Assert.That(deque, HasCount((int)Capacity() + 1));
        }
Ejemplo n.º 24
0
 static Deque()
 {
     theHashCode = typeof(Deque <T>).AssemblyQualifiedName.GetHashCode();
     unchecked {
         theHashCode += typeof(T).AssemblyQualifiedName.GetHashCode();
     }
     theEmpty = new EmptyDeque();
 }
        public void dequeue_whenPopulated(IDeque <SimpleLinkedValue> deque)
        {
            SimpleLinkedValue first = deque.Peek();

            Assert.That(deque.Dequeue(), Is.SameAs(first));
            Assert.That(deque, HasCount((int)Capacity() - 1));
            Assert.That(deque.Contains(first), Is.False);
        }
Ejemplo n.º 26
0
 public static bool GreaterThanIDeque(IDeque a, IDeque b)
 {
     if (a.Count == b.Count)
     {
         return(false);
     }
     return(GreaterOrEqualIDeque(a, b));
 }
Ejemplo n.º 27
0
 public static bool LessThanIDeque(IDeque a, IDeque b)
 {
     if (a.Count == b.Count)
     {
         return(false);
     }
     return(LessOrEqualIDeque(a, b));
 }
Ejemplo n.º 28
0
 public static IDeque FillDeque(IDeque dequeToCopyTo, string valueTypeName, object hopefullyDequeToCopy, IGraphModel model)
 {
     if (hopefullyDequeToCopy is IDeque)
     {
         return(FillDeque(dequeToCopyTo, valueTypeName, (IDeque)hopefullyDequeToCopy, model));
     }
     throw new Exception("Deque copy constructor expects deque as source.");
 }
Ejemplo n.º 29
0
 private void DequeCollectionOperations(IDeque <int> deque)
 {
     for (var i = 0; i < 1000; i++)
     {
         deque.Append(i + 1);
     }
     deque.CollectionOperations <int>(1000);
 }
Ejemplo n.º 30
0
        /// <summary>
        /// Returns a string representation of the given Deque
        /// </summary>
        /// <param name="deque">The Deque of which to get the string representation</param>
        /// <param name="graph">The graph with the model and the element names if available, otherwise null</param>
        /// <param name="firstLevelObjectEmitted">Prevents emitting of further objects and thus infinite regressions</param>
        /// <param name="nameToObject">If not null, the names of visited objects are added</param>
        /// <param name="procEnv">If not null, the processing environment is used for transient object unique id emitting and fetching</param>
        /// <returns>string representation of Deque</returns>
        public static string ToString(IDeque deque, IGraph graph, bool firstLevelObjectEmitted,
                                      IDictionary <string, IObject> nameToObject, IGraphProcessingEnvironment procEnv)
        {
            string type;
            string content;

            ToString(deque, out type, out content, null, graph, firstLevelObjectEmitted, nameToObject, procEnv);
            return(content);
        }
Ejemplo n.º 31
0
        /// <summary>
        /// Enqueues a sequence of items to the back of the <see cref="IDeque{T}"/>.
        /// </summary>
        /// <typeparam name="T">The type of items.</typeparam>
        /// <param name="deque">The double-ended queue to add the items to.</param>
        /// <param name="items">The items to enqueue.</param>
        public static void EnqueueRangeToBack <T>(this IDeque <T> deque, IEnumerable <T> items)
        {
            deque.ThrowIfNull(nameof(deque));
            items.ThrowIfNull(nameof(items));

            foreach (T item in items)
            {
                deque.EnqueueItemToBack(item);
            }
        }
Ejemplo n.º 32
0
 public static void FillDequeWithVar <K>(Deque <K> targetDeque, Type varType, IDeque sourceDeque)
 {
     foreach (object entry in sourceDeque)
     {
         if (entry.GetType() == varType)
         {
             targetDeque.Add((K)entry);
         }
     }
 }
Ejemplo n.º 33
0
 public void HandleSensorData(SensorData sd)
 {
     State origState = state;
     dataSinceStateStart = dataSinceStateStart.EnqueueRight(sd);
     ChangeState(sd.FingerCount(), sd.Distance());
     if (origState != state)
     {
         // state changed! Send off the vanish event for the previous gesture, and a appear event for the current gesture
         gestures.Enqueue(new Gesture(origState, EventType.VANISH, stateEntryTime, dataSinceStateStart));
         stateEntryTime = DateTime.Now;
         dataSinceStateStart = Deque<SensorData>.Empty;
         dataSinceStateStart = dataSinceStateStart.EnqueueRight(sd);
         gestures.Enqueue(new Gesture(state, EventType.APPEAR, stateEntryTime, dataSinceStateStart));
     }
     else
     {
         // continuation of the existing gesture
         gestures.Enqueue(new Gesture(state, EventType.MOVE, stateEntryTime, dataSinceStateStart));
     }
 }
Ejemplo n.º 34
0
        /// <summary>
        /// Returns a string representation of the given Deque
        /// </summary>
        /// <param name="deque">The Deque of which to get the string representation</param>
        /// <param name="type">The type as string, e.g deque<int></param>
        /// <param name="content">The content as string, e.g. ] 42, 43 [</param>
        /// <param name="attrType">The attribute type of the deque if available, otherwise null</param>
        /// <param name="graph">The graph with the model and the element names if available, otherwise null</param>
        public static void ToString(IDeque deque, out string type, out string content,
            AttributeType attrType, IGraph graph)
        {
            Type valueType;
            ContainerHelper.GetDequeType(deque, out valueType);

            StringBuilder sb = new StringBuilder(256);
            sb.Append("]");

            AttributeType attrValueType = attrType != null ? attrType.ValueType : null;

            if(deque != null)
            {
                type = "deque<" + valueType.Name + ">";
                bool first = true;
                foreach(Object entry in deque)
                {
                    if(first) { sb.Append(ToString(entry, attrValueType, graph)); first = false; }
                    else { sb.Append(","); sb.Append(ToString(entry, attrValueType, graph)); }
                }
            }
            else
            {
                type = "<INVALID>";
            }

            sb.Append("[");
            content = sb.ToString();
        }
Ejemplo n.º 35
0
 /// <summary>
 /// Returns a string representation of the given Deque
 /// after the given operation with the given parameters was applied
 /// </summary>
 /// <param name="deque">The base Deque of the operation</param>
 /// <param name="changeType">The type of the change operation</param>
 /// <param name="newValue">The new value to be inserted/added if changeType==PutElement on deque.</param>
 /// <param name="type">The type as string, e.g deque<int></param>
 /// <param name="content">The content as string, e.g. ] 42, 43 [ </param>
 /// <param name="attrType">The attribute type of the Deque</param>
 /// <param name="graph">The graph with the model and the element names</param>
 public static void ToString(IDeque deque,
     AttributeChangeType changeType, Object newValue,
     out string type, out string content,
     AttributeType attrType, IGraph graph)
 {
     if(changeType == AttributeChangeType.PutElement)
     {
         Type valueType;
         ContainerHelper.GetDequeType(deque, out valueType);
         ToString(deque, out type, out content, attrType, graph);
         content += ".add(" + ToString(newValue, attrType.ValueType, graph) + ")";
     }
     else if(changeType == AttributeChangeType.RemoveElement)
     {
         Type valueType;
         ContainerHelper.GetDequeType(deque, out valueType);
         ToString(deque, out type, out content, attrType, graph);
         content += ".rem()";
     }
     else // changeType==AttributeChangeType.Assign
     {
         ToString((IDeque)newValue, out type, out content, attrType, graph);
     }
 }
Ejemplo n.º 36
0
 void HighlightDeque(IDeque value, string name, bool addAnnotation)
 {
     int distanceToTop = 0;
     object prevElem = null;
     foreach(object elem in value)
     {
         if(elem is IGraphElement)
             HighlightSingleValue(elem, name + "@" + distanceToTop, addAnnotation);
         if(elem is INode && distanceToTop >= 1)
         {
             if(addAnnotation)
                 ycompClient.AddEdge(name + distanceToTop, name + "[->]", (INode)prevElem, (INode)elem);
             else
                 ycompClient.DeleteEdge(name + distanceToTop);
         }
         prevElem = elem;
         ++distanceToTop;
     }
 }