Ejemplo n.º 1
0
        public void Int16Test()
        {
            short clr = short.MaxValue / 2;

            var v = IshtarMarshal.ToIshtarObject(clr);
            var r = IshtarMarshal.ToDotnetInt16(v, null);

            Assert.AreEqual(clr, r);
        }
Ejemplo n.º 2
0
        public void StringTest()
        {
            var clr = "long.MaxValue / 2";

            var v = IshtarMarshal.ToIshtarObject(clr);
            var r = IshtarMarshal.ToDotnetString(v, null);

            Assert.AreEqual(clr, r);
        }
Ejemplo n.º 3
0
        public void Int64Test()
        {
            long clr = long.MaxValue / 2;

            var v = IshtarMarshal.ToIshtarObject(clr);
            var r = IshtarMarshal.ToDotnetInt64(v, null);

            Assert.AreEqual(clr, r);
        }
Ejemplo n.º 4
0
        public void Int32Test()
        {
            int clr = int.MaxValue / 2;

            var v = IshtarMarshal.ToIshtarObject(clr);
            var r = IshtarMarshal.ToDotnetInt32(v, null);

            Assert.AreEqual(clr, r);
        }
Ejemplo n.º 5
0
        public unsafe void LDSTR_Test()
        {
            var targetStr = "the string";

            using var ctx = CreateContext();
            var result = ctx.Execute((gen, _) =>
            {
                gen.Emit(OpCodes.LDC_STR, targetStr);
                gen.Emit(OpCodes.RET);
            });

            Validate();
            Assert.AreEqual(VeinTypeCode.TYPE_STRING, (*result.returnValue).type);

            var obj = (IshtarObject *)result.returnValue->data.p;

            Assert.AreEqual(targetStr, IshtarMarshal.ToDotnetString(obj, null));
        }
Ejemplo n.º 6
0
        public unsafe void CorrectAllocateArray()
        {
            if (VM.watcher is DefaultWatchDog)
            {
                VM.watcher = new TestWatchDog();
            }

            var array = IshtarGC.AllocArray(VeinTypeCode.TYPE_I4.AsRuntimeClass(), 10, 1);

            Assert.AreEqual(10UL, array->length);
            Assert.AreEqual(1UL, array->rank);

            foreach (var i in..10)
            {
                array->Set((uint)i, IshtarMarshal.ToIshtarObject(88 * i));
            }

            foreach (var i in..10)
            {
                var obj = array->Get((uint)i);
                Assert.AreEqual(i * 88, IshtarMarshal.ToDotnetInt32(obj, null));
            }
        }
Ejemplo n.º 7
0
        public void StringFormatWithArray()
        {
            using var ctx = CreateContext();

            var result = ctx.Execute((x, _) =>
            {
                x.Emit(OpCodes.LDC_STR, "{0} and {1}");
                x.Emit(OpCodes.LDC_STR, "foo");
                x.Emit(OpCodes.LDC_STR, "bar");
                x.Emit(OpCodes.CALL, VeinCore.StringClass.FindMethod("format", new []
                {
                    VeinCore.StringClass, /* template */
                    VeinCore.ObjectClass, /* o1 */
                    VeinCore.ObjectClass  /* o2 */
                }));
                x.Emit(OpCodes.RET);
            });

            Assert.AreEqual(VeinTypeCode.TYPE_STRING, result.returnValue->type);
            var str = IshtarMarshal.ToDotnetString((IshtarObject *)result.returnValue->data.p, result);

            Assert.AreEqual("foo and bar", str);
        }
Ejemplo n.º 8
0
        public unsafe void CorrectAllocateString()
        {
            var result = IshtarMarshal.ToIshtarObject("foo");

            IshtarGC.FreeObject(&result, new CallFrame());
        }