Esempio n. 1
0
        public void NestedVectorTest()
        {
            var name = Guid.NewGuid().ToString();

            using (var memory = SharedMemory.Create(name, 1024 * 1024))
                using (var vv = Factory.Make <IVector <IVector <int> > >(memory))
                {
                    const int N = 5;
                    const int x = 123;

                    for (int i = 0; i < N; ++i)
                    {
                        using (var v = Factory.Make <IVector <int> >(memory))
                        {
                            v.Resize(N, x);
                            Assert.AreEqual(N, v.Count);

                            vv.Add(v);
                        }
                    }

                    Assert.AreEqual(N, vv.Count);
                    Assert.AreEqual(N * N * x, vv.Sum((v) => { using (v) return(v.Sum()); }));
                }
        }
Esempio n. 2
0
        public void SerializerTest()
        {
            using (var memory = SharedMemory.Create(Guid.NewGuid().ToString(), 4 * 1024 * 1024))
                using (var pool = new BufferPool(memory))
                {
                    foreach (var protocol in new global::Bond.ProtocolType[] { global::Bond.ProtocolType.COMPACT_PROTOCOL, global::Bond.ProtocolType.FAST_PROTOCOL, global::Bond.ProtocolType.SIMPLE_PROTOCOL })
                    {
                        foreach (var marshal in new bool[] { true, false })
                        {
                            var serializer = new Serializer(protocol, marshal, pool, memory);

                            Assert.AreEqual(protocol, serializer.ProtocolType);
                            Assert.AreEqual(marshal, serializer.IsMarshaled);

                            var        s1 = MakeRandomStruct();
                            TestStruct s2;

                            using (var buffer = serializer.Serialize(s1))
                            {
                                s2 = serializer.Deserialize <TestStruct>(buffer);
                            }

                            // Bond.Comparer.Equal does not properly work with Bonded<T> fields.
                            Assert.IsTrue(global::Bond.Comparer.Equal(s1.FieldBonded.Deserialize(), s2.FieldBonded.Deserialize()));
                            s1.FieldBonded = s2.FieldBonded = global::Bond.Bonded <ValueStruct> .Empty;

                            Assert.IsTrue(global::Bond.Comparer.Equal(s1, s2));
                        }
                    }
                }
        }
Esempio n. 3
0
        internal unsafe SharedMemory RentNative(int bucketSize)
        {
            var bucketIndex = SelectBucketIndex(bucketSize);

            BufferRef.EnsureBucketIndexInRange(bucketIndex);

            // We must init the buffer header before allocating.
            // We know from inside BRA.Allocate txn the value or BufferRef
            // before committing. For new we must init the header,
            // for one from the free list we must assert the buffer is disposed
            // and not owned (it may be in Releasing state though).

            var br = _bra.Allocate((byte)bucketIndex, out _, _buckets);

            var db = _buckets.DangerousGet(br);

            var sm = SharedMemory.Create(db, br, this);

            Debug.Assert(sm.IsDisposed);
            Debug.Assert(Unsafe.Read <uint>(sm.HeaderPointer) == (HeaderFlags.Releasing | HeaderFlags.IsDisposed));

            sm.FromReleasingDisposedToOwned();

            Debug.Assert(!sm.IsDisposed);
            Debug.Assert(sm.ReferenceCount == 0);
            Debug.Assert(Unsafe.Read <uint>(sm.HeaderPointer) == HeaderFlags.IsOwned);

            return(sm);
        }
Esempio n. 4
0
        static void Main(string[] args)
        {
            Console.Title = "HostA";
            SharedMemory sm = SharedMemory.Create("SM1", 1024);

            using (var w = sm.AsWriter())
            {
                w.Write(1);
                w.Write(2);
                w.Write(3);
                w.Write(new byte[5] {
                    0x4, 0x5, 0x6, 0x7, 0x8
                });
            }
            Console.WriteLine("Values written to shared memory = {0}", sm.Name);
            Console.ReadLine();
            SharedMemory sm2 = SharedMemory.Create("SM2", 2L * 1024);

            using (var w = sm2.AsWriter(offset: 0L, size: 1L * 1024))
            {
                var buffer1 = new byte[1 * 1024];
                for (int i = 0; i < buffer1.Length; i += 2)
                {
                    buffer1[i]     = 0xA;
                    buffer1[i + 1] = 0xB;
                }
                w.Write(buffer1);
                Console.WriteLine("Values written to shared memory = {0} offset = {1} size = {2}", w.Source.Name, w.Offset, w.Size);
            }
            Console.ReadLine();
            using (var w = sm2.AsWriter(offset: 1L * 1024, size: 1L * 1024))
            {
                var buffer2 = new byte[1 * 1024];
                for (int i = 0; i < buffer2.Length; i += 2)
                {
                    buffer2[i]     = 0xD;
                    buffer2[i + 1] = 0xE;
                }
                w.Write(buffer2);
                Console.WriteLine("Values written to shared memory = {0} offset = {1} size = {2}", w.Source.Name, w.Offset, w.Size);
            }
            Console.ReadLine();
            using (var w = sm2.AsWriter(offset: 0L, size: 1L * 1024))
            {
                var buffer1 = new byte[1 * 1024];
                for (int i = 0; i < buffer1.Length; i += 2)
                {
                    buffer1[i]     = 0xC;
                    buffer1[i + 1] = 0xF;
                }
                w.Write(buffer1);
                Console.WriteLine("Values written to shared memory = {0} offset = {1} size = {2}", w.Source.Name, w.Offset, w.Size);
            }
            Console.ReadLine();
        }
Esempio n. 5
0
        public void VectorTest()
        {
            var name = Guid.NewGuid().ToString();

            using (var memory = SharedMemory.Create(name, 1024 * 1024))
                using (var v = Factory.Make <IVector <int> >(memory))
                {
                    const int N = 100;

                    for (int i = 0; i < N; ++i)
                    {
                        v.Add(i);
                    }

                    v.Resize(2 * N, 1);

                    Assert.AreEqual(2 * N, v.Count);
                    Assert.AreEqual(N + (N - 1) * N / 2, v.Sum());
                }
        }