Exemple #1
0
                        /// <summary>
                        /// Called from Frame Sequencer clocks
                        /// </summary>
                        public void FreqTimerStep( )
                        {
                            m_timer -= 4;

                            if (m_timer <= 0)
                            {
                                // Note: shifts of 14 and 15 have no operation
                                if (m_shiftFreq < 14)
                                {
                                    int result = (m_linearShiftReg & 0x1) ^ ((m_linearShiftReg >> 1) & 0x1);
                                    m_linearShiftReg >>= 1;
                                    m_linearShiftReg  |= result << 14;
                                    if (m_stepsMode == 1)
                                    {
                                        m_linearShiftReg &= ~0x40; // clear bit 6
                                        m_linearShiftReg |= result << 6;
                                    }
                                }

                                // Reload Frequency
                                m_timer += CalcFrequency();
                            }


                            // Update filter buffer
                            m_samplesToFilterL.Dequeue();
                            m_samplesToFilterL.Enqueue(SampleL());

                            m_samplesToFilterR.Dequeue();
                            m_samplesToFilterR.Enqueue(SampleR());
                        }
        public void TestForSeveralEnqueuesAndDequeues()
        {
            CircularBuffer <int> testData = new CircularBuffer <int>(5);
            int item1 = 6;
            int item2 = 8;
            int item3 = 10;
            int item4 = 15;
            int item5 = 22;
            int item6 = 25;
            int item7 = 33;

            testData.Enqueue(item1);
            testData.Enqueue(item2);
            testData.Enqueue(item3);
            testData.Enqueue(item4);
            testData.Enqueue(item5);
            testData.Dequeue();
            testData.Dequeue();
            testData.Enqueue(item6);
            testData.Enqueue(item7);
            int actual   = testData.Dequeue();
            int expected = 10;

            Assert.Equal(expected, actual);
        }
        public void RemoveAtTest()
        {
            var buffer = new CircularBuffer <long>(5);

            Assert.AreEqual(default(long), buffer.Enqueue(1));
            Assert.AreEqual(default(long), buffer.Enqueue(2));
            Assert.AreEqual(default(long), buffer.Enqueue(3));
            Assert.AreEqual(default(long), buffer.Enqueue(4));
            Assert.AreEqual(default(long), buffer.Enqueue(5));
            buffer.RemoveAt(buffer.IndexOf(2));
            buffer.RemoveAt(buffer.IndexOf(4));
            Assert.AreEqual(3, buffer.Count);
            Assert.AreEqual(1, buffer.Dequeue());
            Assert.AreEqual(3, buffer.Dequeue());
            Assert.AreEqual(5, buffer.Dequeue());
            Assert.AreEqual(0, buffer.Count);
            Assert.AreEqual(default(long), buffer.Enqueue(1));
            Assert.AreEqual(default(long), buffer.Enqueue(2));
            Assert.AreEqual(default(long), buffer.Enqueue(3));
            Assert.AreEqual(default(long), buffer.Enqueue(4));
            Assert.AreEqual(default(long), buffer.Enqueue(5));
            buffer.RemoveAt(buffer.IndexOf(1));
            buffer.RemoveAt(buffer.IndexOf(3));
            buffer.RemoveAt(buffer.IndexOf(5));
            Assert.AreEqual(2, buffer.Count);
            Assert.AreEqual(2, buffer.Dequeue());
            Assert.AreEqual(4, buffer.Dequeue());
            Assert.AreEqual(0, buffer.Count);
        }
 public void TestUnderwrite()
 {
     var buffer = new CircularBuffer<long>(5);
     Assert.AreEqual(default(long), buffer.Enqueue(1));
     Assert.AreEqual(default(long), buffer.Enqueue(2));
     Assert.AreEqual(default(long), buffer.Enqueue(3));
     Assert.AreEqual(3, buffer.Count);
     Assert.AreEqual(1, buffer.Dequeue());
     Assert.AreEqual(2, buffer.Dequeue());
     Assert.AreEqual(3, buffer.Dequeue());
     Assert.AreEqual(0, buffer.Count);
 }
        public void UnderwriteTest()
        {
            var buffer = new CircularBuffer <long>(5);

            Assert.AreEqual(default(long), buffer.Enqueue(1));
            Assert.AreEqual(default(long), buffer.Enqueue(2));
            Assert.AreEqual(default(long), buffer.Enqueue(3));
            Assert.AreEqual(3, buffer.Count);
            Assert.AreEqual(1, buffer.Dequeue());
            Assert.AreEqual(2, buffer.Dequeue());
            Assert.AreEqual(3, buffer.Dequeue());
            Assert.AreEqual(0, buffer.Count);
        }
 public void TestDecreaseCapacityWhenFull()
 {
     var buffer = new CircularBuffer<long>(3);
     Assert.AreEqual(default(long), buffer.Enqueue(1));
     Assert.AreEqual(default(long), buffer.Enqueue(2));
     Assert.AreEqual(default(long), buffer.Enqueue(3));
     Assert.AreEqual(3, buffer.Count);
     buffer.Capacity = 2;
     Assert.AreEqual(2, buffer.Count);
     Assert.AreEqual(1, buffer.Dequeue());
     Assert.AreEqual(2, buffer.Dequeue());
     Assert.AreEqual(0, buffer.Count);
 }
        public void DecreaseCapacityWhenFullTest()
        {
            var buffer = new CircularBuffer <long>(3);

            Assert.AreEqual(default(long), buffer.Enqueue(1));
            Assert.AreEqual(default(long), buffer.Enqueue(2));
            Assert.AreEqual(default(long), buffer.Enqueue(3));
            Assert.AreEqual(3, buffer.Count);
            buffer.Capacity = 2;
            Assert.AreEqual(2, buffer.Count);
            Assert.AreEqual(1, buffer.Dequeue());
            Assert.AreEqual(2, buffer.Dequeue());
            Assert.AreEqual(0, buffer.Count);
        }
    public void OverwriteQueue()
    {
        CircularBuffer <float> queue = new CircularBuffer <float>(5);

        float[] values = new float[5];
        int     i      = 0;

        queue.Enqueue(1);
        queue.Enqueue(2);
        queue.Enqueue(3);
        queue.Enqueue(4);
        queue.Enqueue(5);
        queue.Enqueue(6);
        queue.Enqueue(7);

        while (!queue.IsEmpty)
        {
            values[i] = queue.Dequeue();
            i++;
        }

        Assert.AreEqual(values[0], 3);
        Assert.AreEqual(values[1], 4);
        Assert.AreEqual(values[2], 5);
        Assert.AreEqual(values[3], 6);
        Assert.AreEqual(values[4], 7);
    }
Exemple #9
0
        void Plot_Dados(object status)
        {
            while (Loopear)
            {
                if (!circularBuffer.IsEmpty)
                {
                    int N_amostras = circularBuffer.SamplesToRead;

                    for (int i = 0; i < N_amostras; i++)
                    {
                        Tempo += (1 / Fa);
                        //Console.WriteLine(circularBuffer.Dequeue());
                        this.chartSinal.Invoke(new Action(() =>
                        {
                            chartSinal.Series[0].Points.AddXY(Tempo, circularBuffer.Dequeue());
                            if (Tempo > chartSinal.ChartAreas[0].AxisX.Maximum)
                            {
                                //chartSinal.Series[0].Points.RemoveAt(0);
                                //chartSinal.ChartAreas[0].AxisX.Maximum += (1 / Fa);

                                chartSinal.ChartAreas[0].AxisX.Minimum = chartSinal.ChartAreas[0].AxisX.Maximum;

                                chartSinal.ChartAreas[0].AxisX.Maximum += T_Janela;
                            }
                        }));
                    }
                }
            }
        }
 /// <summary>
 /// Get data from quat after processing
 /// </summary>
 /// <returns></returns>
 public double[] HandleQuat()
 {
     double[] quat = new double[4];
     quat = ConvertToDouble(circularBufferQ.Dequeue());
     //double[] ang = toEuler(quat); //get values in angle
     return(quat);
 }
        private double processRate(int size, string queue)
        {
            CircularBuffer <IMessage> buffer   = new CircularBuffer <IMessage>(100);
            IMessageListener          listener = new SyncListener(buffer);
            string localQueue = "queue-" + UUID.RandomUuid();

            Session.QueueDeclare(localQueue, null, null, Option.AUTO_DELETE);
            Session.ExchangeBind(localQueue, "amq.direct", queue);
            Session.AttachMessageListener(listener, localQueue);
            Session.MessageSubscribe(localQueue);
            double   rate  = 0;
            RangeSet range = new RangeSet();

            for (int i = 0; i < size; ++i)
            {
                IMessage m = buffer.Dequeue();
                range.Add(m.Id);
                BinaryReader reader = new BinaryReader(m.Body, Encoding.UTF8);
                byte[]       body   = new byte[m.Body.Length - m.Body.Position];
                reader.Read(body, 0, body.Length);
                rate += BitConverter.ToDouble(body, 0);
            }
            Session.MessageAccept(range);
            return(rate);
        }
Exemple #12
0
 public T Get()
 {
     if (_availables.Count == 0)
     {
         Reclaim();
         Debug.WriteLine("Everything is given out, reclaiming. Perhaps raise capacity!");
     }
     return(_availables.Dequeue());
 }
Exemple #13
0
    void Update()
    {
        if (!isLocalPlayer)
        {
            return;
        }

        playbackDelay += Time.deltaTime;

        if (isTransmitting)
        {
            int currentPos    = Microphone.GetPosition(null);
            int diff          = currentPos - lastPos;
            int partitionSize = recordFrequency / cBuffer.BufferLength;

            if (currentPos < lastPos)
            {
                diff = recordFrequency - lastPos + currentPos - 1;
            }

            if (diff >= partitionSize)
            {
                sampleBuffer = new float[diff * aud.clip.channels];

                aud.clip.GetData(sampleBuffer, lastPos);

                cBuffer.Enqueue(sampleBuffer);

                lastPos = currentPos;
            }

            if (!cBuffer.IsEmpty)
            {
                if (playbackDelay >= 0.05f)
                {
                    byte[] sampleBytes = new byte[sampleBuffer.Length * 4];

                    sampleBytes = VoiceUtils.Compress(cBuffer.Dequeue());
                    CmdStopRecording(sampleBytes);
                    playbackDelay = 0;
                }
            }
        }

        if (Input.GetKeyDown(KeyCode.O))
        {
            Debug.Log("Recording started.");
            StartRecording();
        }

        if (Input.GetKeyDown(KeyCode.P))
        {
            Microphone.End(null);
            Debug.Log("Recording ended.");
            isTransmitting = false;
        }
    }
    public void DequeueFromEmpty()
    {
        CircularBuffer <float> queue = new CircularBuffer <float>(5);

        try {
            queue.Dequeue();
        } catch (Exception error) {
            Assert.AreEqual(error.Message, "Queue is empty.");
        }
    }
        public void EmptyQueueTest()
        {
            CircularBuffer <int> testData = new CircularBuffer <int>(16);

            //is.Count = 0;
            //_rear + 1 == _front;
            //testData.Count = 0;
            //var actual = testData.Dequeue();
            //var expected = "The buffer is empty";
            Assert.Throws <InvalidOperationException>(() => testData.Dequeue());
        }
        public void EnqueueItemDequeueItem()
        {
            CircularBuffer <int> testData = new CircularBuffer <int>(16);
            int item = 5;

            testData.Enqueue(item);
            int actual   = testData.Dequeue();
            int expected = 5;

            Assert.Equal(expected, actual);
        }
Exemple #17
0
        /// <summary>
        /// Restores the results of the previous scan.
        /// </summary>
        /// <exception cref="InvalidOperationException">Thrown if no previous results are present.</exception>
        public void UndoLastScan()
        {
            if (!CanUndoLastScan)
            {
                throw new InvalidOperationException();
            }

            var store = stores.Dequeue();

            store?.Dispose();
        }
        public void EnqueueFiveDequeueThreeItemsReturnValue()
        {
            CircularBuffer <int> testData = new CircularBuffer <int>(6);
            int item1 = 6;
            int item2 = 8;
            int item3 = 10;
            int item4 = 15;
            int item5 = 22;

            testData.Enqueue(item1);
            testData.Enqueue(item2);
            testData.Enqueue(item3);
            testData.Enqueue(item4);
            testData.Enqueue(item5);
            testData.Dequeue();
            testData.Dequeue();
            int actual   = testData.Dequeue();
            int expected = 10;

            Assert.Equal(expected, actual);
        }
Exemple #19
0
        void Update()
        {
            var now = Time.time;
            var earliestTInGraph = now - GraphWidthInSeconds;

            _drawPoints.Clear();
            _drawPoints.Add(FloatsToGraphVector(0, _earliestShownValue));
            bool firstvalueFound = false;
            int  dequeueCount    = 0;

            for (int i = 0; i < DataPoints.Count; i++)
            {
                var point = DataPoints[i];
                if (point.TimeStamp < earliestTInGraph)
                {
                    dequeueCount++; // Out of range
                    continue;
                }

                if (!firstvalueFound && i - 1 >= 0)
                {
                    firstvalueFound = true;
                    var prevPoint = DataPoints[i - 1];
                    var normNow   = Mathf.InverseLerp(prevPoint.TimeStamp, point.TimeStamp, now);
                    _earliestShownValue = Mathf.Lerp(prevPoint.Value, point.Value, normNow);
                    _drawPoints[0]      = FloatsToGraphVector(0, _earliestShownValue);
                }

                var normTime  = (point.TimeStamp - earliestTInGraph) / (now - earliestTInGraph);
                var normValue = point.Value;
                _drawPoints.Add(FloatsToGraphVector(normTime, normValue));

                if (i + 1 == DataPoints.Count)
                {
                    _lastValue = point.Value;
                }
            }

            for (int i = 0; i < dequeueCount; i++)
            {
                DataPoints.Dequeue();
            }

            var currentTimePoint = FloatsToGraphVector(1, _lastValue);

            _drawPoints.Add(currentTimePoint);
            // Copy to a cached array to prevent gc.
            _drawPoints.CopyTo(_drawArray);
            Renderer.positionCount = _drawPoints.Count;
            // Positions > positionCount are simply not used.
            Renderer.SetPositions(_drawArray);
        }
Exemple #20
0
 public Property CircularBuffer_dequeue_after_enqueue_should_return_original_item(CircularBuffer <int> buffer,
                                                                                  int[] itemsToAdd)
 {
     for (var i = 0; i < itemsToAdd.Length; i++)
     {
         buffer.Enqueue(itemsToAdd[i]);
         var dequeue = buffer.Dequeue();
         if (dequeue != itemsToAdd[i])
         {
             return(false.When(buffer.Capacity > 0).Label($"Failed with {buffer}"));
         }
     }
     return(true.ToProperty());
 }
        private void process(int size, string queue)
        {
            CircularBuffer <IMessage> buffer   = new CircularBuffer <IMessage>(100);
            IMessageListener          listener = new SyncListener(buffer);
            string localQueue = "queue-" + UUID.RandomUuid();

            Session.QueueDeclare(localQueue, null, null, Option.AUTO_DELETE);
            Session.ExchangeBind(localQueue, "amq.direct", queue);
            Session.AttachMessageListener(listener, localQueue);
            Session.MessageSubscribe(localQueue);
            for (int i = 0; i < size; ++i)
            {
                buffer.Dequeue();
            }
        }
Exemple #22
0
    //清空缓存中的消息,必须在当前帧进行处理,超过当前帧可能会造成下一帧的数据错误
    public void FlushPacketQueue()
    {
        int time = CDataModel.InputEvent.Milliseconds();

        while (!sendPacketQueue.IsEmpty)
        {
            var packet = sendPacketQueue.Peek();
            if (packet.release >= time)             //延迟操作
            {
                break;
            }
            sendPacketQueue.Dequeue();
            updSocket.SendMsg(packet.packet.Data, packet.packet.CurSize, packet.to);
        }
    }
        public void EnqueueThreeDequeueOneReturnValue()
        {
            CircularBuffer <int> testData = new CircularBuffer <int>(16);
            int item1 = 6;
            int item2 = 8;
            int item3 = 22;

            testData.Enqueue(item1);
            testData.Enqueue(item2);
            testData.Enqueue(item3);
            int actual   = testData.Dequeue();
            int expected = 6;

            Assert.Equal(expected, actual);
        }
 public bool Dequeue(out T item)
 {
     if (queue.Count > 0)
     {
         lock (queue) {
             if (queue.Count > 0)
             {
                 item = queue.Dequeue();
                 return(true);
             }
         }
     }
     item = default(T);
     return(false);
 }
    public void DequeueThreeFloats()
    {
        CircularBuffer <float> queue = new CircularBuffer <float>(5);

        queue.Enqueue(1);
        queue.Enqueue(2);
        queue.Enqueue(3);

        while (!queue.IsEmpty)
        {
            queue.Dequeue();
        }

        Assert.AreEqual(queue.Length, 0);
    }
        public void setHeaders()
        {          
            _log.Debug("Running: setHeaders");
            IClientSession ssn = Client.CreateSession(0);
            ssn.QueueDeclare("queue1");
            ssn.ExchangeBind("queue1", "amq.direct", "queue1");
            ssn.Sync();
            CircularBuffer<IMessage> buff = new CircularBuffer<IMessage>(10); 
            SyncListener listener = new SyncListener(ssn, buff);
            ssn.AttachMessageListener(listener, "queue1");
            ssn.MessageSubscribe("queue1");

            IMessage message = new org.apache.qpid.client.Message();
            message.DeliveryProperties.SetRoutingKey("queue1");
            const long someLong = 14444444;
            message.ApplicationHeaders.Add("someLong", someLong);
            const int someInt = 14;
            message.ApplicationHeaders.Add("soneInt", someInt);
            const float someFloat = 14.001F;
            message.ApplicationHeaders.Add("soneFloat", someFloat);
            const double someDouble = 14.5555555;
            message.ApplicationHeaders.Add("someDouble", someDouble);
            const byte someByte = 2;
            message.ApplicationHeaders.Add("someByte", someByte);
            const string someString = "someString";
            message.ApplicationHeaders.Add("someString", someString);
            const char someChar = 'a';
            message.ApplicationHeaders.Add("someChar", someChar);
            const Boolean someBoolean = true;
            message.ApplicationHeaders.Add("someBoolean", someBoolean);

            // transfer the message 
            ssn.MessageTransfer("amq.direct", message); 

            // get the message and check the headers 
            IMessage messageBack = buff.Dequeue();
            Assert.IsTrue(((string) messageBack.ApplicationHeaders["someString"]).Equals(someString));
            Assert.IsTrue(((char)messageBack.ApplicationHeaders["someChar"]).Equals(someChar));
            Assert.IsTrue((long)messageBack.ApplicationHeaders["someLong"] == someLong);
            Assert.IsTrue((int)messageBack.ApplicationHeaders["soneInt"] == someInt);           
            Assert.IsTrue((double)messageBack.ApplicationHeaders["someDouble"] == someDouble);
            Assert.IsTrue((byte) messageBack.ApplicationHeaders["someByte"] == someByte);
            Assert.IsTrue((Boolean)messageBack.ApplicationHeaders["someBoolean"]);
            // c# has an conversion precision issue with decimal 
            Assert.IsTrue((float) messageBack.ApplicationHeaders["soneFloat"] <= someFloat);
            float b = (float) messageBack.ApplicationHeaders["soneFloat"];
            Assert.IsTrue(Convert.ToInt32(b) == Convert.ToInt32(someFloat));
        }
        public void CircularBuffer_Dequeue()
        {
            int[] data = { 0, 1, 2, 3 };
            var buffer = new CircularBuffer<int>(data.Length);
            buffer.EnqueueRange(data, 0, data.Length);

            buffer.Dequeue();

            Assert.AreEqual(3, buffer.Count);
            Assert.AreEqual(data.Length, buffer.Capacity);
            Assert.AreEqual(1, buffer.Head);
            Assert.AreEqual(0, buffer.Tail);
            Assert.IsTrue(buffer.Contains(1));
            Assert.IsFalse(buffer.Contains(0));
            CollectionAssert.AreEqual(new[] { 1, 2, 3 }, buffer.ToArray());
        }
Exemple #28
0
        //private void ProcessRecvData(int dataStartOffset, int totalReceivedDataSize, int alreadyProcessedDataSize, AsyncUserToken token, SocketAsyncEventArgs e)
        //{
        //    if (ReceivedPackets)
        //        ReceivedPackets = false;

        //    if (alreadyProcessedDataSize >= totalReceivedDataSize)
        //    {
        //        return;
        //    }

        //    if (token.MessageSize == null || token.MessageID == null)
        //    {
        //        if (totalReceivedDataSize > HEADER_SIZE)
        //        {
        //            Buffer.BlockCopy(e.Buffer, dataStartOffset, _headerBuffer, 0, HEADER_SIZE);

        //            var messageID = _headerBuffer[0];
        //            var messageSize = (ushort)((_headerBuffer[2] << 8) | _headerBuffer[1]);

        //            token.MessageID = messageID;
        //            token.MessageSize = messageSize - HEADER_SIZE;
        //            token.DataStartOffset = dataStartOffset + HEADER_SIZE;

        //            ProcessRecvData(token.DataStartOffset, totalReceivedDataSize, alreadyProcessedDataSize + HEADER_SIZE, token, e);
        //        }
        //    }
        //    else
        //    {
        //        int messageSize = token.MessageSize.Value;
        //        if (totalReceivedDataSize - alreadyProcessedDataSize >= messageSize)
        //        {
        //            byte[] data = new byte[messageSize];
        //            Buffer.BlockCopy(e.Buffer, dataStartOffset, data, 0, messageSize);

        //            // process message
        //            Packet packet = new Packet(data, token.MessageID.Value, messageSize);
        //            PacketHandlers.Handlers.OnPacket(packet);

        //            token.DataStartOffset = dataStartOffset + messageSize;
        //            token.MessageID = null;
        //            token.MessageSize = null;

        //            //_pool.AddFreeSegment(data);

        //            ProcessRecvData(token.DataStartOffset, totalReceivedDataSize, alreadyProcessedDataSize + messageSize, token, e);
        //        }
        //    }
        //}


        private void HandleReceive()
        {
            if (!IsRunning || _buffer == null || _buffer.Length <= 0)
            {
                return;
            }

            lock (_buffer)
            {
                ReceivedPackets = false;

                int length = _buffer.Length;

                while (length > 0 && IsRunning)
                {
                    byte id   = _buffer.GetId();
                    int  size = _buffer.GetLength();

                    if (size < 3)
                    {
                        NetworkManager.Disconnect(false);
                        break;
                    }

                    if (length < size)
                    {
                        break;
                    }

                    byte[] packet = 4096 >= size?_pool.GetFreeSegment() : new byte[size];

                    size = _buffer.Dequeue(packet, 0, size);

                    Packet p = new Packet(packet, id, size);
                    PacketHandlers.Handlers.OnPacket(p);

                    length = _buffer.Length;

                    if (4096 >= size)
                    {
                        _pool.AddFreeSegment(packet);
                    }

                    ReceivedPackets = true;
                }
            }
        }
Exemple #29
0
        public ControllerState GetState()
        {
            // see if new real state came in since last check
            if (_realStateUpdated)
            {
                var rts = _pool.Get();
                rts.SetState(_sw.Elapsed, _realState.Axes, _realState.Buttons, _realState.Hats);
                _q.Enqueue(rts);
                _realStateUpdated = false;
            }

            if (Method == DelayMethod.Task)
            {
                return(_taskDelayedState);
            }
            else if (_q.Count == 0)
            {
                return(_lastState);
            }


            // find the first enqueued state that's not older than delay,
            // then the previous is our candidate
            TimedControllerState ret = _q.Peek();

            while (_q.Count > 0 && (_sw.Elapsed - _q.Peek().Time) >= Delay)
            {
                ret = _q.Dequeue();
                _pool.Return(ret);
            }

            if (ret != null && !ReferenceEquals(ret, _lastState) && (_sw.Elapsed - ret.Time) >= Delay)
            {
                // Debug.WriteLine("Packet dequeued @ {0}, margin {1}ms",_sw.Elapsed.TotalMilliseconds, (_sw.Elapsed - ret.Time - Delay).TotalMilliseconds);
                _lastState = ret;
                // found the state, everything older is useless
                OnStateUpdated();
            }

            return(_lastState);            // this can happen up to Delay time after the first input arrived*/
        }
Exemple #30
0
        public void CircularbufferOverRunTest()
        {
            var v = new CircularBuffer <int>(10);

            try
            {
                v.Dequeue();
                Assert.Fail();
            }
            catch (InvalidOperationException)
            {
            }
            catch (Exception)
            {
                Assert.Fail();
            }
            prepareBufferValue(v, new Queue <int>());
            try
            {
                var hoge = v[v.Capacity];
                Assert.Fail();
            }
            catch (IndexOutOfRangeException)
            {
            }
            catch (Exception)
            {
                Assert.Fail();
            }
            try
            {
                var hoge = v[-v.Capacity - 1];
            }
            catch (IndexOutOfRangeException)
            {
            }
            catch (Exception)
            {
                Assert.Fail();
            }
        }
 public void BlockingEnqueue()
 {
     _log.Debug("Running: BlockingEnqueue");
     const int size = 10;
     _buf = new CircularBuffer<Object>(size);
     // add size element anc check that the size +1 add blocks 
     for (int i = 1; i < size; i++ )
     {
         _buf.Enqueue(new object());
     }
     // check tha the buffer is now full 
     Thread t = new Thread(Go);
     t.Start();
     Thread.Sleep(100);
     // the trhead t should block until an element is dequeued 
     Assert.IsTrue(t.ThreadState == ThreadState.WaitSleepJoin);           
     _buf.Dequeue();
     // t should now be stopped 
     Thread.Sleep(100);
     Assert.IsTrue(t.ThreadState == ThreadState.Stopped);           
 }
Exemple #32
0
        public void EnqueueDequeue()
        {
            const int size = 10;
            var       buff = new CircularBuffer <int>(size);

            for (int i = 0; i < size; i++)
            {
                buff.Enqueue(i);
                Assert.Equal(i + 1, buff.Length);
            }

            for (int i = size; i < 10_000; i++)
            {
                int dequeued = buff.Dequeue();
                Assert.Equal(i - size, dequeued);
                Assert.Equal(size - 1, buff.Length);

                buff.Enqueue(i);
                Assert.Equal(size, buff.Length);
            }
        }
        public void TestForWrappingIndicesOfBuffer()
        {
            CircularBuffer <int> testData = new CircularBuffer <int>(5);
            int item1 = 6;
            int item2 = 8;
            int item3 = 10;
            int item4 = 15;
            int item5 = 22;
            int item6 = 25;
            int item7 = 33;

            testData.Enqueue(item1);
            testData.Enqueue(item2);
            testData.Enqueue(item3);
            testData.Enqueue(item4);
            testData.Enqueue(item5);
            testData.Dequeue();
            testData.Enqueue(item6);
            bool actual = testData.Enqueue(item7);

            Assert.False(actual);
        }
 private void Go()
 {
     while (!closed)
     {
         //MemoryStream st = queue.Dequeue();
         byte[] st = queue.Dequeue();
         if (st != null)
         {
             try
             {
                 //   int length = (int) st.Length;
                 //  byte[] buf = new byte[length];
                 //  st.Read(buf, 0, length);
                 bufStream.Write(st, 0, st.Length);
             }
             catch (Exception e)
             {
                 closed = true;
                 ioTransport.Connection.On_ReceivedException(this, new ExceptionArgs(e));
             }
         }
     }
 }
Exemple #35
0
        public void BlockingEnqueue()
        {
            _log.Debug("Running: BlockingEnqueue");
            const int size = 10;

            _buf = new CircularBuffer <Object>(size);
            // add size element anc check that the size +1 add blocks
            for (int i = 1; i < size; i++)
            {
                _buf.Enqueue(new object());
            }
            // check tha the buffer is now full
            Thread t = new Thread(Go);

            t.Start();
            Thread.Sleep(100);
            // the trhead t should block until an element is dequeued
            Assert.IsTrue(t.ThreadState == ThreadState.WaitSleepJoin);
            _buf.Dequeue();
            // t should now be stopped
            Thread.Sleep(100);
            Assert.IsTrue(t.ThreadState == ThreadState.Stopped);
        }
 public void TestRemoveAt()
 {
     var buffer = new CircularBuffer<long>(5);
     Assert.AreEqual(default(long), buffer.Enqueue(1));
     Assert.AreEqual(default(long), buffer.Enqueue(2));
     Assert.AreEqual(default(long), buffer.Enqueue(3));
     Assert.AreEqual(default(long), buffer.Enqueue(4));
     Assert.AreEqual(default(long), buffer.Enqueue(5));
     buffer.RemoveAt(buffer.IndexOf(2));
     buffer.RemoveAt(buffer.IndexOf(4));
     Assert.AreEqual(3, buffer.Count);
     Assert.AreEqual(1, buffer.Dequeue());
     Assert.AreEqual(3, buffer.Dequeue());
     Assert.AreEqual(5, buffer.Dequeue());
     Assert.AreEqual(0, buffer.Count);
     Assert.AreEqual(default(long), buffer.Enqueue(1));
     Assert.AreEqual(default(long), buffer.Enqueue(2));
     Assert.AreEqual(default(long), buffer.Enqueue(3));
     Assert.AreEqual(default(long), buffer.Enqueue(4));
     Assert.AreEqual(default(long), buffer.Enqueue(5));
     buffer.RemoveAt(buffer.IndexOf(1));
     buffer.RemoveAt(buffer.IndexOf(3));
     buffer.RemoveAt(buffer.IndexOf(5));
     Assert.AreEqual(2, buffer.Count);
     Assert.AreEqual(2, buffer.Dequeue());
     Assert.AreEqual(4, buffer.Dequeue());
     Assert.AreEqual(0, buffer.Count);
 }
 public void CircularBuffer_DequeueWhenEmpty()
 {
     var buffer = new CircularBuffer<string>();
     buffer.Dequeue();
 }
        public void UsageExample()
        {
            // Create a buffer with a capacity of 5 items.
            var buffer = new CircularBuffer<long>(5);

            // Add three.
            foreach (var i in Enumerable.Range(1, 3))
                buffer.Enqueue(i);
            Debug.WriteLine(buffer);
            // Capacity=5, Count=3, Buffer=[1,2,3]

            // Add three more.
            foreach (var i in Enumerable.Range(4, 3))
                buffer.Enqueue(i);
            Debug.WriteLine(buffer);
            // Capacity=5, Count=5, Buffer=[2,3,4,5,6]

            // Remove the third.
            var value = buffer[3];
            buffer.RemoveAt(3);
            Debug.WriteLine(buffer);
            // Capacity=5, Count=4, Buffer=[2,3,4,6]

            // Re-insert it.
            buffer.Insert(3, value);
            Debug.WriteLine(buffer);
            // Capacity=5, Count=5, Buffer=[2,3,4,5,6]

            // Dequeue.
            Debug.Print("Value = {0}", buffer.Dequeue());
            // Value = 2
            Debug.WriteLine(buffer);
            // Capacity=5, Count=4, Buffer=[3,4,5,6]

            // Increase the capacity.
            buffer.Capacity = 6;
            Debug.WriteLine(buffer);
            // Capacity=6, Count=4, Buffer=[3,4,5,6]

            // Add three more.
            foreach (var i in Enumerable.Range(7, 3))
                buffer.Enqueue(i);
            Debug.WriteLine(buffer);
            // Capacity=6, Count=6, Buffer=[4,5,6,7,8,9]

            // Reduce the capacity.
            buffer.Capacity = 4;
            Debug.WriteLine(buffer);
            // Capacity=4, Count=4, Buffer=[4,5,6,7]

            // Clear the buffer.
            buffer.Clear();
            Debug.WriteLine(buffer);
            // Capacity=4, Count=0, Buffer=[]
        }
Exemple #39
0
        public override void Start()
        {
            if (Options.Tx > 0)
            {
                Session.TxSelect();
                Session.Sync();
            }
            CircularBuffer<IMessage> buffer = new CircularBuffer<IMessage>(100);
            // Create a listener and subscribe it to the queue named "message_queue"
            IMessageListener listener = new SyncListener(buffer);

            string dest = "dest" + UUID.RandomUuid();
            Session.AttachMessageListener(listener, dest);
            Session.MessageSubscribe(_queue, dest,
                                     Options.Tx > 0 || Options.SubAck > 0
                                         ? MessageAcceptMode.EXPLICIT
                                         : MessageAcceptMode.NONE,
                                     MessageAcquireMode.PRE_ACQUIRED, null, 0, null);
            // issue credits     
            Session.MessageSetFlowMode(dest, MessageFlowMode.WINDOW);
            Session.MessageFlow(dest, MessageCreditUnit.BYTE, ClientSession.MESSAGE_FLOW_MAX_BYTES);

            // Notify controller we are ready.
            IMessage message = new Message();
            message.DeliveryProperties.SetRoutingKey("sub_ready");

            message.AppendData(Encoding.UTF8.GetBytes("ready"));
            Session.MessageTransfer("amq.direct", message);

            if (Options.Tx > 0)
            {
                Session.TxCommit();
                Session.Sync();
            }


            for (int j = 0; j < Options.Iterations; ++j)
            {
               
                //need to allocate some more credit
                Session.MessageFlow(dest, MessageCreditUnit.MESSAGE, (long)Options.SubQuota);
                
                RangeSet range = new RangeSet();
                IMessage msg;
                DateTime start = DateTime.Now;
                for (long i = 0; i < Options.SubQuota; ++i)
                {                   
                    msg = buffer.Dequeue();
                    if (Options.Tx > 0 && ((i + 1)%Options.Tx == 0))
                    {
                        Session.TxCommit();
                        Session.Sync();
                    }
                    if (Options.IntervalSub > 0)
                    {
                        Thread.Sleep((int) Options.IntervalSub*1000);
                    }
                    range.Add(msg.Id);
                }
                if (Options.Tx > 0 || Options.SubAck > 0)
                    Session.MessageAccept(range);
                range.Clear();
                if (Options.Tx > 0)
                {
                    Session.TxSelect();
                    Session.Sync();
                }
                DateTime end = DateTime.Now;

                // Report to publisher.
                message.DeliveryProperties.SetRoutingKey("sub_done");
                message.ClearData();
                message.AppendData(BitConverter.GetBytes(Options.SubQuota / end.Subtract(start).TotalMilliseconds ));
                Session.MessageTransfer("amq.direct", message);
                if (Options.Tx > 0)
                {
                    Session.TxSelect();
                    Session.Sync();
                }
            }
            Session.Close();
        }
Exemple #40
0
        public override void Start()
        {
            byte[] data = new byte[Options.Size];
            // randomly populate data 
            Random r = new Random(34);
            r.NextBytes(data);
            IMessage message = new Message();
            message.AppendData(data);

            message.DeliveryProperties.SetRoutingKey(_key);

            if (Options.Durable)
                message.DeliveryProperties.SetDeliveryMode(MessageDeliveryMode.PERSISTENT);

            if (Options.Tx > 0)
            {
                Session.TxSelect();
                Session.Sync();
            }

            CircularBuffer<IMessage> buffer = new CircularBuffer<IMessage>(100);
            // Create a listener and subscribe it to the queue named "pub_start"          
            IMessageListener listener = new SyncListener(buffer);
            string localQueue = "localQueue-" + UUID.RandomUuid().ToString();
            Session.QueueDeclare(localQueue, null, null, Option.AUTO_DELETE);
            Session.ExchangeBind(localQueue, "amq.direct", "pub_start");
            Session.AttachMessageListener(listener, localQueue);
            Session.MessageSubscribe(localQueue);
            if (Options.Tx > 0)
            {
                Session.TxCommit();
                Session.Sync();
            }
            buffer.Dequeue();

            for (int j = 0; j < Options.Iterations; ++j)
            {
                DateTime start = DateTime.Now;                
                for (long i = 0; i < Options.Count; ++i)
                {
                    Session.MessageTransfer(_exchange, message);

                    if (Options.SyncPub)
                    {
                        Session.Sync();
                    }
                    if (Options.Tx > 0 && (i + 1)%Options.Tx == 0)
                    {
                        Session.TxSelect();
                        Session.Sync();
                    }
                    if (Options.IntervalPub > 0)
                    {
                        Thread.Sleep((int) Options.IntervalSub*1000);
                    }
                }
                Session.Sync();
                DateTime end = DateTime.Now;

                // Report to publisher.
                message.DeliveryProperties.SetRoutingKey("pub_done");
                message.ClearData();
                double time = end.Subtract(start).TotalMilliseconds;
                byte[] rate = BitConverter.GetBytes( Options.Count / time );
                message.AppendData(rate);
                Session.MessageTransfer("amq.direct", message);
                if (Options.Tx > 0)
                {
                    Session.TxSelect();
                    Session.Sync();
                }
            }
            Session.Close();
        }
Exemple #41
0
 private double processRate(int size, string queue)
 {
     CircularBuffer<IMessage> buffer = new CircularBuffer<IMessage>(100);
     IMessageListener listener = new SyncListener(buffer);
     string localQueue = "queue-" + UUID.RandomUuid();
     Session.QueueDeclare(localQueue, null, null, Option.AUTO_DELETE);
     Session.ExchangeBind(localQueue, "amq.direct", queue);
     Session.AttachMessageListener(listener, localQueue);
     Session.MessageSubscribe(localQueue);
     double rate = 0;
     RangeSet range = new RangeSet();
     for (int i = 0; i < size; ++i)
     {
         IMessage m = buffer.Dequeue();
         range.Add(m.Id);
         BinaryReader reader = new BinaryReader(m.Body, Encoding.UTF8);
         byte[] body = new byte[m.Body.Length - m.Body.Position];
         reader.Read(body, 0, body.Length);
         rate += BitConverter.ToDouble(body,0);
     }
     Session.MessageAccept(range);
     return rate;
 }
Exemple #42
0
 private void process(int size, string queue)
 {
     CircularBuffer<IMessage> buffer = new CircularBuffer<IMessage>(100);
     IMessageListener listener = new SyncListener(buffer);
     string localQueue = "queue-" + UUID.RandomUuid();
     Session.QueueDeclare(localQueue, null, null, Option.AUTO_DELETE);
     Session.ExchangeBind(localQueue, "amq.direct", queue);
     Session.AttachMessageListener(listener, localQueue);
     Session.MessageSubscribe(localQueue);
     for (int i = 0; i < size; ++i)
     {
         buffer.Dequeue();
     }
 }