public void ShouldEnqueueNormally()
        {
            var uut = new FixedSizeQueue <int>(1);

            uut.Enqueue(0);

            Assert.AreEqual(0, uut.Dequeue());
        }
        public void ShouldDequeueWhenLimitIsReached()
        {
            var uut = new FixedSizeQueue <int>(1);

            uut.Enqueue(0);
            uut.Enqueue(1);

            Assert.AreEqual(1, uut.Dequeue());
        }
예제 #3
0
        public void FixedSizeQueue_CanDequeue()
        {
            FixedSizeQueue<int> queue = new FixedSizeQueue<int>(1);
            queue.Enqueue(1);
            Assert.AreEqual(1, queue.Count);

            int dequeued = queue.Dequeue();
            Assert.AreEqual(1, dequeued);
            Assert.AreEqual(0, queue.Count);
        }
예제 #4
0
 public void FixedSizeQueue_DequeueThrowsWhenEmpty()
 {
     FixedSizeQueue<int> queue = new FixedSizeQueue<int>(1);
     try
     {
         queue.Dequeue();
         Assert.Fail("Dequeueing did not throw an exception when the queue was empty.");
     }
     catch (InvalidOperationException)
     {
         // expected
     }
 }
예제 #5
0
        // Uses a fixed size queue in order to keep track of history
        // m = number of nodes in tree
        // Best case (balanced tree): O(log(m + n)) time, O(n) space
        // Worst case (inbalanced tree): O(m) time, O(n) space (stack)
        public static BinaryTreeNode FindQueue(BinaryTreeNode root, int n)
        {
            if (root == null)
            {
                throw new ArgumentNullException();
            }

            int counter = n;

            FixedSizeQueue <BinaryTreeNode> visited = new FixedSizeQueue <BinaryTreeNode>(n);
            BinaryTreeNode current      = root;
            bool           visitedRight = false;

            while (true)
            {
                while (current.Right != null && !visitedRight)
                {
                    visited.Enqueue(current);
                    current = current.Right;
                }

                if (counter == 1)
                {
                    return(current);
                }
                else
                {
                    counter--;
                    // backstep
                    if (current.Left != null)
                    {
                        current      = current.Left;
                        visitedRight = false;
                    }
                    else
                    {
                        // ran out of nodes - not enough nodes in tree
                        if (visited.Count <= 0)
                        {
                            return(null);
                        }

                        current      = visited.Dequeue();
                        visitedRight = true;
                    }
                }
            }
        }
예제 #6
0
            private void SendThread()
            {
                Thread.CurrentThread.IsBackground = true;
                var interval = new TimeSpan(0, 0, 5);

                while (true)
                {
                    try
                    {
                        if (queue.Count > 0)
                        {
                            var        logEntries = new List <string>();
                            RequestLog requestLog;
                            lock (Locker)
                            {
                                requestLog = queue.Dequeue();
                                if (requestLog.Messages.Count > 0)
                                {
                                    logEntries.Add(requestLog.Time.ToString("yyyy-MM-ddTHH:mm:ss"));
                                }
                                logEntries.AddRange(requestLog.Messages.Select(msg => msg.Text));
                                logEntries.AddRange(requestLog.Tags.Select(tag => tag.Name + "=" + tag.Value));
                            }

                            if (logEntries.Any())
                            {
                                var sb = new StringBuilder();

                                foreach (var logEntry in logEntries)
                                {
                                    sb.Append(logEntry + "\n");
                                }

                                var request = new RestRequest(_requestUrl, Method.POST);
                                request.AddParameter("application/json", sb.ToString(), ParameterType.RequestBody);
                                request.AddHeader("content-type", "application/json");
                                _restClient.ExecuteAsync(request, response =>
                                {
                                    if (response.ErrorMessage == null)
                                    {
                                        return;
                                    }
                                    Console.WriteLine("Splunk error: " + response.ErrorMessage + ", for: " + logEntries.First());
                                    if (response.ErrorMessage.Contains("SendFailure") || response.ErrorMessage.Contains("ReceiveFailure"))
                                    {
                                        Enqueue(requestLog);
                                    }
                                });
                            }
                        }
                    }
                    catch (ThreadAbortException)
                    {
                        // Ignore
                    }
                    catch (Exception ex)
                    {
                        System.Diagnostics.Debug.WriteLine("Splunk exception: " + ex);
                        Console.WriteLine("Splunk exception: " + ex);
                    }
                    Thread.Sleep(interval);
                }
            }
        private void TrySpawnOnBreadboard()
        {
            if (_holes.Count == _activeSpawnablePrefabHolesNeeded)
            {
                // Breadboard holes
                Transform H_1_place = _holes.Dequeue();
                Transform H_2_place = _holes.Dequeue();

                GameEvents.current.FireEvent_UnmarkHoleAsWiring(H_1_place);
                GameEvents.current.FireEvent_UnmarkHoleAsWiring(H_2_place);

                Breadboard breadboard = _breadboard.GetComponent <Breadboard>();

                if (breadboard.HolesOccupied(H_1_place, H_2_place, out string errorText))
                {
                    GameEvents.current.FireEvent_HUDMessage(errorText, Controllers.HUDMessageType.Error);
                    return;
                }

                if (breadboard.HolesNearbyInline(H_1_place, H_2_place))
                {
                    // Init prefab
                    GameObject prefab = Instantiate(_activeSpawnablePrefab);

                    PlaceComponentOnBreadboard(prefab, H_1_place, H_2_place);

                    ComponentType type = ComponentType.Unknown;
                    foreach (Tag tag in prefab.GetComponent <BaseComponent>().Tags)
                    {
                        switch (tag)
                        {
                        case Tag.LED:
                        {
                            type = ComponentType.LED;
                            prefab.GetComponent <LED>().CathodeCoord =                                   // Breadboard first click is always Cathode (-)
                                                                       H_1_place.name.Replace("H_", ""); // Name is like H_G1, etc., we only need postfix

                            prefab.GetComponent <LED>().AnodeCoord =                                     // Second click is always Anode (+)
                                                                     H_2_place.name.Replace("H_", "");   // Name is like H_J2, etc., we only need postfix
                            break;
                        }

                        case Tag.Resistor:
                        {
                            type = ComponentType.Resistor;
                            prefab.GetComponent <Resistor>().SetResistance(_resistorOhmConfigured);

                            prefab.GetComponent <Resistor>().Coord1 =                                   // No polarity component, coord1 might be coord2,
                                                                                                        // It doesn't matter
                                                                      H_1_place.name.Replace("H_", ""); // Name is like H_G1, etc., we only need postfix

                            prefab.GetComponent <Resistor>().Coord2 =                                   // No polarity component, coord1 might be coord2,
                                                                                                        // It doesn't matter
                                                                      H_2_place.name.Replace("H_", ""); // Name is like H_G1, etc., we only need postfix

                            break;
                        }
                        }
                    }

                    // Inform about occupied breaboard holes
                    GameEvents.current.FireEvent_ComponentSpawnBreadboard(H_1_place, H_2_place, type, prefab);
                    //GameEvents.current.FireEvent_HUDMessage("Component spawned!", Controllers.HUDMessageType.Info);
                }
                else
                {
                    GameEvents.current.FireEvent_HUDMessage("Draudžiamos mazgų pozicijos!", Controllers.HUDMessageType.Error);
                }
            }
        }