public void AddMoreThanCapacity()
        {
            EvictionQueue queue = new EvictionQueue();

            queue.Capacity      = 1000;
            queue.EvictionCount = 100;

            for (int i = 0; i < 10000; i++)
            {
                TradeLike    item       = new TradeLike(i, 1000 + i, "aaa", DateTime.Now, 456);
                CachedObject packedItem = CachedObject.Pack(item);
                queue.AddNew(packedItem);
            }

            Assert.IsTrue(queue.EvictionRequired);
            Assert.AreEqual(queue.Count, 10000);
            ICollection <CachedObject> evicted = queue.GO();

            //should have removed 100 more than ( 10000 - 1000 )
            Assert.AreEqual(queue.Count, 900);
            Assert.IsFalse(queue.EvictionRequired);
            Assert.AreEqual(evicted.Count, 9100);
            //asking for eviction when bellow maximum capacity will not remove any item
            evicted = queue.GO();
            Assert.AreEqual(evicted.Count, 0);
        }
        public void Remove()
        {
            var schema = TypedSchemaFactory.FromType(typeof(TradeLike));

            var queue = new EvictionQueue {
                Capacity = 7, EvictionCount = 2
            };

            var allItems = new List <PackedObject>();

            for (var i = 0; i < 10; i++)
            {
                var item       = new TradeLike(i, 1000 + i, "aaa", DateTime.Now, 456);
                var packedItem = PackedObject.Pack(item, schema);
                queue.AddNew(packedItem);
                allItems.Add(packedItem);
            }

            //items in queue now: 0 1 2 3 4 5 6 7 8 9
            queue.TryRemove(allItems[0]);
            queue.TryRemove(allItems[2]);

            //items in queue now: 1 3 4 5 6 7 8 9
            Assert.IsTrue(queue.EvictionRequired);
            var evicted = queue.Go();

            //items in queue now: 5 6 7 8 9

            Assert.AreEqual(evicted.Count, 3);

            Assert.AreEqual(evicted[0].PrimaryKey, 1);
            Assert.AreEqual(evicted[1].PrimaryKey, 3);
        }
        public void Remove()
        {
            EvictionQueue queue = new EvictionQueue();

            queue.Capacity      = 7;
            queue.EvictionCount = 2;

            List <CachedObject> allItems = new List <CachedObject>();

            for (int i = 0; i < 10; i++)
            {
                TradeLike    item       = new TradeLike(i, 1000 + i, "aaa", DateTime.Now, 456);
                CachedObject packedItem = CachedObject.Pack(item);
                queue.AddNew(packedItem);
                allItems.Add(packedItem);
            }

            //items in queue now: 0 1 2 3 4 5 6 7 8 9
            queue.TryRemove(allItems[0]);
            queue.TryRemove(allItems[2]);

            //items in queue now: 1 3 4 5 6 7 8 9
            Assert.IsTrue(queue.EvictionRequired);
            IList <CachedObject> evicted = queue.GO();

            //items in queue now: 5 6 7 8 9

            Assert.AreEqual(evicted.Count, 3);

            Assert.AreEqual(evicted[0].PrimaryKey, 1);
            Assert.AreEqual(evicted[1].PrimaryKey, 3);
        }
        public void AddMoreThanCapacity()
        {
            var schema = TypedSchemaFactory.FromType(typeof(TradeLike));

            var queue = new EvictionQueue();

            queue.Capacity      = 1000;
            queue.EvictionCount = 100;

            for (var i = 0; i < 10000; i++)
            {
                var item       = new TradeLike(i, 1000 + i, "aaa", DateTime.Now, 456);
                var packedItem = PackedObject.Pack(item, schema);
                queue.AddNew(packedItem);
            }

            Assert.IsTrue(queue.EvictionRequired);
            Assert.AreEqual(queue.Count, 10000);
            ICollection <PackedObject> evicted = queue.Go();

            //should have removed 100 more than ( 10000 - 1000 )
            Assert.AreEqual(queue.Count, 900);
            Assert.IsFalse(queue.EvictionRequired);
            Assert.AreEqual(evicted.Count, 9100);
            //asking for eviction when bellow maximum capacity will not remove any item
            evicted = queue.Go();
            Assert.AreEqual(evicted.Count, 0);
        }
예제 #5
0
        public void TestProtobufEncoding()
        {
            QueryBuilder builder = new QueryBuilder(typeof(TradeLike));
            KeyValue     kval    = builder.MakeKeyValue("Nominal", 0);
            MemoryStream stream  = new MemoryStream();

            Serializer.Serialize(stream, kval);
            stream.Seek(0, SeekOrigin.Begin);
            KeyValue reloaded = Serializer.Deserialize <KeyValue>(stream);

            Assert.AreEqual(kval, reloaded);

            stream.Seek(0, SeekOrigin.Begin);
            TradeLike    obj    = new TradeLike(1, 1001, "aaa", new DateTime(2009, 10, 10), 0);
            CachedObject packed = CachedObject.Pack(obj).Metadata;

            Serializer.SerializeWithLengthPrefix(stream, packed, PrefixStyle.Fixed32);
            Serializer.SerializeWithLengthPrefix(stream, packed, PrefixStyle.Fixed32);
            stream.Seek(0, SeekOrigin.Begin);
            CachedObject t1 = Serializer.DeserializeWithLengthPrefix <CachedObject>(stream, PrefixStyle.Fixed32);

            Assert.AreEqual(t1.IndexKeys[2].ToString(), "#0");
            CachedObject t2 = Serializer.DeserializeWithLengthPrefix <CachedObject>(stream, PrefixStyle.Fixed32);

            Assert.AreEqual(t2.IndexKeys[2].ToString(), "#0");
        }
예제 #6
0
        public void TestProtobufEncoding()
        {
            var schema = TypedSchemaFactory.FromType(typeof(TradeLike));

            var builder = new QueryBuilder(typeof(TradeLike));
            var kval    = new KeyValue(10, schema.KeyByName("Nominal"));
            var stream  = new MemoryStream();

            Serializer.Serialize(stream, kval);
            stream.Seek(0, SeekOrigin.Begin);
            var reloaded = Serializer.Deserialize <KeyValue>(stream);

            Assert.AreEqual(kval, reloaded);

            stream.Seek(0, SeekOrigin.Begin);
            var obj    = new TradeLike(1, 1001, "aaa", new DateTime(2009, 10, 10), 0);
            var packed = PackedObject.Pack(obj, schema);

            Serializer.SerializeWithLengthPrefix(stream, packed, PrefixStyle.Fixed32);
            Serializer.SerializeWithLengthPrefix(stream, packed, PrefixStyle.Fixed32);
            stream.Seek(0, SeekOrigin.Begin);
            var t1 = Serializer.DeserializeWithLengthPrefix <PackedObject>(stream, PrefixStyle.Fixed32);

            Assert.AreEqual(t1.Values[4].ToString(), "0");
            var t2 = Serializer.DeserializeWithLengthPrefix <PackedObject>(stream, PrefixStyle.Fixed32);

            Assert.AreEqual(t2.Values[4].ToString(), "0");
        }
예제 #7
0
        public void FeedAndGetMany()
        {
            //feed lots of objects to the cache
            var session = _client.BeginFeed <TradeLike>(50, false);

            var random = new Random();

            for (var i = 0; i < 10000; i++)
            {
                var newItem = new TradeLike(i, 1000 + i, "aaa", new DateTime(2009, 10, 10), random.Next(1000));
                _client.Add(session, newItem);
            }

            _client.EndFeed <TradeLike>(session);

            //get a subset of the fed objects
            var builder = new QueryBuilder(typeof(TradeLike));
            var query   = builder.GetMany("Nominal < 500");


            //sync get
            _client.GetMany <TradeLike>(query).ToList();


            //async get
            {
                var evt = new ManualResetEvent(false);

                var itemCount = 0;
                _client.AsyncGetMany(query, delegate(TradeLike like, int item, int total)
                {
                    itemCount++;
                    if (item == total)
                    {
                        evt.Set();
                    }
                }, delegate { });
                evt.WaitOne();

                Console.WriteLine("Found {0} objects", itemCount);
            }

            //select
            _logger.Reset();
            var cmd = _parser.Parse("select TRADELIKE where Nominal < 500");

            Assert.IsTrue(cmd.CanExecute);
            Assert.IsNotNull(cmd.TryExecute(_client));

            // check for empty result
            _logger.Reset();
            cmd = _parser.Parse("select TRADELIKE where Nominal < 500, Folder = inexistent");
            Assert.IsTrue(cmd.CanExecute);
            Assert.IsNotNull(cmd.TryExecute(_client));
        }
        public void AddTwiceRaisesAnException()
        {
            EvictionQueue queue = new EvictionQueue();

            queue.Capacity      = 1000;
            queue.EvictionCount = 100;
            TradeLike    item       = new TradeLike(0, 1000, "aaa", DateTime.Now, 456);
            CachedObject packedItem = CachedObject.Pack(item);

            queue.AddNew(packedItem);

            //this call should raise an exception
            Assert.Throws <NotSupportedException>(() => queue.AddNew(packedItem));
        }
        public void AddTwiceRaisesAnException()
        {
            var schema = TypedSchemaFactory.FromType(typeof(TradeLike));

            var queue = new EvictionQueue {
                Capacity = 1000, EvictionCount = 100
            };
            var item       = new TradeLike(0, 1000, "aaa", DateTime.Now, 456);
            var packedItem = PackedObject.Pack(item, schema);

            queue.AddNew(packedItem);

            //this call should raise an exception
            Assert.Throws <NotSupportedException>(() => queue.AddNew(packedItem));
        }
예제 #10
0
        public void EvictionOrder()
        {
            EvictionQueue queue = new EvictionQueue();

            queue.Capacity      = 9;
            queue.EvictionCount = 2;

            List <CachedObject> allItems = new List <CachedObject>();

            for (int i = 0; i < 10; i++)
            {
                TradeLike    item       = new TradeLike(i, 1000 + i, "aaa", DateTime.Now, 456);
                CachedObject packedItem = CachedObject.Pack(item);
                queue.AddNew(packedItem);
                allItems.Add(packedItem);
            }

            //items in queue now: 0 1 2 3 4 5 6 7 8 9

            Assert.IsTrue(queue.EvictionRequired);
            IList <CachedObject> evicted = queue.Go();

            //items in queue: 3 4 5 6 7 8 9

            Assert.AreEqual(evicted.Count, 3);

            Assert.AreEqual(evicted[0].PrimaryKey, 0);
            Assert.AreEqual(evicted[1].PrimaryKey, 1);

            queue.Touch(allItems[3]);
            //items in queue: 4 5 6 7 8 9 3

            queue.Touch(allItems[4]);
            //items in queue: 5 6 7 8 9 3 4

            queue.Capacity = 7;
            evicted        = queue.Go();

            Assert.AreEqual(evicted.Count, 2);

            Assert.AreEqual(evicted[0].PrimaryKey, 5);
            Assert.AreEqual(evicted[1].PrimaryKey, 6);
        }
        public void FeedAndGetMany()
        {
            //feed lots of objects to the cache
            var session = _client.BeginFeed <TradeLike>(50, false);

            var random = new Random();

            for (var i = 0; i < 10000; i++)
            {
                var newItem = new TradeLike(i, 1000 + i, "aaa", new DateTime(2009, 10, 10), random.Next(1000));
                _client.Add(session, newItem);
            }

            _client.EndFeed <TradeLike>(session);

            //get a subset of the fed objects
            var builder = new QueryBuilder(typeof(TradeLike));
            var query   = builder.GetMany("Nominal < 500");


            //sync get
            _client.GetMany <TradeLike>(query).ToList();


            //select
            _logger.Reset();
            var cmd = _parser.Parse("select TRADELIKE where Nominal < 500");

            Assert.IsTrue(cmd.CanExecute);
            Assert.IsNotNull(cmd.TryExecute(_client));

            // check for empty result
            _logger.Reset();
            cmd = _parser.Parse("select TRADELIKE where Nominal < 500, Folder = inexistent");
            Assert.IsTrue(cmd.CanExecute);
            Assert.IsNotNull(cmd.TryExecute(_client));
        }
예제 #12
0
        public void SerializeCachedObjectUsingProtocolBuffers()
        {
            ClientSideTypeDescription.RegisterType(typeof(TradeLike));
            Random randGen = new Random();


            //to byte array
            for (int i = 0; i < 5000; i++)
            {
                TradeLike    obj    = new TradeLike(1, 1001, "aaa", new DateTime(2009, 10, 10), 1);
                CachedObject packed = CachedObject.Pack(obj).Metadata;

                byte[]       data     = SerializationHelper.ObjectToBytes(packed, SerializationMode.ProtocolBuffers, null);
                CachedObject reloaded =
                    SerializationHelper.ObjectFromBytes <CachedObject>(data, SerializationMode.ProtocolBuffers, false);


                Assert.AreEqual(reloaded.IndexKeys[2], packed.IndexKeys[2]);

                Console.WriteLine(reloaded);
            }


            //to stream
            MemoryStream        stream = new MemoryStream();
            List <CachedObject> items  = new List <CachedObject>();

            for (int i = 0; i < 1000; i++)
            {
                TradeLike    obj    = new TradeLike(1, 1001, "aaa", new DateTime(2009, 10, 10), randGen.Next(1000));
                CachedObject packed = CachedObject.Pack(obj).Metadata;
                items.Add(packed);
            }

            List <CachedObject> itemsReloaded = new List <CachedObject>();

            Streamer.ToStreamGeneric(stream, items);
            stream.Seek(0, SeekOrigin.Begin);
            ManualResetEvent evt = new ManualResetEvent(false);

            Streamer.FromStream(stream,
                                delegate(CachedObject item, int i, int totalItems)
            {
                itemsReloaded.Add(item);
                if (i == totalItems)
                {
                    evt.Set();
                }
            },
                                delegate
            {
                /* ignore exceptions */
            });

            evt.WaitOne();


            for (int i = 0; i < 1000; i++)
            {
                Assert.AreEqual(itemsReloaded[i].IndexKeys[2], items[i].IndexKeys[2]);
            }
        }
예제 #13
0
        public void SerializeCachedObjectUsingProtocolBuffers()
        {
            var schema  = TypedSchemaFactory.FromType(typeof(TradeLike));
            var randGen = new Random();


            //to byte array
            for (var i = 0; i < 5000; i++)
            {
                var obj    = new TradeLike(1, 1001, "aaa", new DateTime(2009, 10, 10), 1);
                var packed = PackedObject.Pack(obj, schema);

                var data     = SerializationHelper.ObjectToBytes(packed, SerializationMode.ProtocolBuffers, false);
                var reloaded =
                    SerializationHelper.ObjectFromBytes <PackedObject>(data, SerializationMode.ProtocolBuffers, false);


                Assert.AreEqual(reloaded.Values[2], packed.Values[2]);

                Console.WriteLine(reloaded);
            }


            //to stream
            var stream = new MemoryStream();
            var items  = new List <PackedObject>();

            for (var i = 0; i < 1000; i++)
            {
                var obj    = new TradeLike(1, 1001, "aaa", new DateTime(2009, 10, 10), randGen.Next(1000));
                var packed = PackedObject.Pack(obj, schema);
                items.Add(packed);
            }

            var itemsReloaded = new List <PackedObject>();

            Streamer.ToStreamGeneric(stream, items);
            stream.Seek(0, SeekOrigin.Begin);
            var evt = new ManualResetEvent(false);

            Streamer.FromStream(stream,
                                delegate(PackedObject item, int i, int totalItems)
            {
                itemsReloaded.Add(item);
                if (i == totalItems)
                {
                    evt.Set();
                }
            },
                                delegate
            {
                /* ignore exceptions */
            });

            evt.WaitOne();


            for (var i = 0; i < 1000; i++)
            {
                Assert.AreEqual(itemsReloaded[i].Values[2], items[i].Values[2]);
            }
        }