public void Test()
        {
            var testCase          = new MirrorPointImplementation();
            var conversionContext = new Definitions();
            var module            = testCase.RootScope.Convert(conversionContext).SafeCastTo(out Tac.Backend.Interpreted.Syntaz_Model_Interpeter.Elements.InterpetedRootScope _);

            var(scope, res) = module.InterpetWithExposedScope(InterpetedContext.Root());

            Assert.False(res.IsReturn(out var _, out var value));

            var implementation = scope.GetMember(new NameKey("mirror")).Value.Has <IInterpetedMethod>();

            var context = TypeManager.InstanceScope(
                (new NameKey("x"), TypeManager.AnyMember(TypeManager.Double(5))),
                (new NameKey("y"), TypeManager.AnyMember(TypeManager.Double(7))));

            {
                Assert.False(implementation.Invoke(TypeManager.Member(context.Convert(TransformerExtensions.NewConversionContext()), context)).IsReturn(out var _, out var method));

                method !.Value.Has <IInterpetedMethod>().Invoke(TypeManager.EmptyMember(TypeManager.Empty()));
            }

            Assert.Equal(7, context.GetMember(new NameKey("x")).Value.Has <IBoxedDouble>().Value);
            Assert.Equal(5, context.GetMember(new NameKey("y")).Value.Has <IBoxedDouble>().Value);

            {
                Assert.False(implementation.Invoke(TypeManager.Member(context.Convert(TransformerExtensions.NewConversionContext()), context)).IsReturn(out var _, out var method));

                method !.Value.Has <IInterpetedMethod>().Invoke(TypeManager.EmptyMember(TypeManager.Empty()));
            }

            Assert.Equal(5, context.GetMember(new NameKey("x")).Value.Has <IBoxedDouble>().Value);
            Assert.Equal(7, context.GetMember(new NameKey("y")).Value.Has <IBoxedDouble>().Value);
        }
Beispiel #2
0
        public void Test()
        {
            var testCase          = new MirrorPointImplementation();
            var conversionContext = new Definitions();
            var module            = testCase.Module.Convert(conversionContext);

            var res = module.Interpet(InterpetedContext.Root());

            Assert.False(res.IsReturn(out var _, out var value));

            var scope          = value.Value.Cast <IInterpetedScope>();
            var implementation = scope.GetMember <IInterpetedAnyType>(new NameKey("mirror")).Value.Cast <IInterpetedImplementation <IInterpetedScope, IInterpedEmpty, IInterpedEmpty> >();

            var context = TypeManager.InstanceScope(
                (new NameKey("x"), TypeManager.AnyMember(TypeManager.Double(5))),
                (new NameKey("y"), TypeManager.AnyMember(TypeManager.Double(7))));

            {
                Assert.False(implementation.Invoke(TypeManager.Member <IInterpetedScope>(context.Convert(TransformerExtensions.NewConversionContext()), context)).IsReturn(out var _, out var method));

                method.Value.Invoke(TypeManager.EmptyMember(TypeManager.Empty()));
            }

            Assert.Equal(7, context.GetMember <IInterpetedAnyType>(new NameKey("x")).Value.Cast <IBoxedDouble>().Value);
            Assert.Equal(5, context.GetMember <IInterpetedAnyType>(new NameKey("y")).Value.Cast <IBoxedDouble>().Value);

            {
                Assert.False(implementation.Invoke(TypeManager.Member <IInterpetedScope>(context.Convert(TransformerExtensions.NewConversionContext()), context)).IsReturn(out var _, out var method));

                method.Value.Invoke(TypeManager.EmptyMember(TypeManager.Empty()));
            }

            Assert.Equal(5, context.GetMember <IInterpetedAnyType>(new NameKey("x")).Value.Cast <IBoxedDouble>().Value);
            Assert.Equal(7, context.GetMember <IInterpetedAnyType>(new NameKey("y")).Value.Cast <IBoxedDouble>().Value);
        }
Beispiel #3
0
        public void Test()
        {
            var testCase          = new OrTypeSample();
            var conversionContext = new Definitions();

            Assert.False(testCase.Module.Convert(conversionContext).Interpet(InterpetedContext.Root()).IsReturn(out var _, out var res));

            Assert.Equal(5, res.Value.Cast <IInterpetedScope>().GetMember <IInterpetedAnyType>(new NameKey("x")).Value.Has <IBoxedDouble>().Value);
            Assert.False(res.Value.Cast <IInterpetedScope>().GetMember <IInterpetedAnyType>(new NameKey("y")).Value.Has <IBoxedBool>().Value);
        }
Beispiel #4
0
        public void Test()
        {
            var testCase          = new Arithmetic();
            var conversionContext = new Definitions();
            var module            = testCase.RootScope.Convert(conversionContext).SafeCastTo(out Tac.Backend.Interpreted.Syntaz_Model_Interpeter.Elements.InterpetedRootScope _);

            var(scope, _) = module.InterpetWithExposedScope(InterpetedContext.Root());

            var x = scope.GetMember(new NameKey("x"));

            Assert.Equal(63.0, x.Value.CastTo <IBoxedDouble>().Value);
        }
Beispiel #5
0
        public void Test()
        {
            var testCase          = new PointObject();
            var conversionContext = new Definitions();

            Assert.False(testCase.Module.Convert(conversionContext).Interpet(InterpetedContext.Root()).IsReturn(out var _, out var res));

            var scope = res.Value.Cast <IInterpetedScope>().GetMember <IInterpetedAnyType>(new NameKey("point")).Value;

            Assert.True(scope.Cast <IInterpetedScope>().ContainsMember(new NameKey("x")));
            Assert.True(scope.Cast <IInterpetedScope>().ContainsMember(new NameKey("y")));
        }
Beispiel #6
0
        public void Test()
        {
            var testCase          = new OrTypeSample();
            var conversionContext = new Definitions();

            var module = testCase.RootScope.Convert(conversionContext).SafeCastTo(out Tac.Backend.Interpreted.Syntaz_Model_Interpeter.Elements.InterpetedRootScope _);

            var(scope, value) = module.InterpetWithExposedScope(InterpetedContext.Root());

            Assert.False(value.IsReturn(out var _, out var res));

            Assert.Equal(5, scope.GetMember(new NameKey("x")).Value.Has <IBoxedDouble>().Value);
            Assert.False(scope.GetMember(new NameKey("y")).Value.Has <IBoxedBool>().Value);
        }
Beispiel #7
0
        public void Test()
        {
            var testCase          = new Arithmetic();
            var conversionContext = new Definitions();
            var module            = testCase.Module.Convert(conversionContext);

            var res = module.Interpet(InterpetedContext.Root());

            Assert.False(res.IsReturn(out var _, out var member));

            var scope = member.Value.Cast <IInterpetedScope>();
            var x     = scope.GetMember <IInterpetedAnyType>(new NameKey("x"));

            Assert.Equal(63.0, x.Value.Cast <IBoxedDouble>().Value);
        }
Beispiel #8
0
        public void Test()
        {
            var testCase          = new PointObject();
            var conversionContext = new Definitions();

            var module = testCase.RootScope.Convert(conversionContext).SafeCastTo(out Tac.Backend.Interpreted.Syntaz_Model_Interpeter.Elements.InterpetedRootScope _);

            var(scope, value) = module.InterpetWithExposedScope(InterpetedContext.Root());

            Assert.False(value.IsReturn(out var _, out var res));

            var pointScope = scope.GetMember(new NameKey("point")).Value;

            Assert.True(pointScope.CastTo <IInterpetedScope>().ContainsMember(new NameKey("x")));
            Assert.True(pointScope.CastTo <IInterpetedScope>().ContainsMember(new NameKey("y")));
        }
Beispiel #9
0
        public static void Run(IProject <IAssembly <InterpetedAssemblyBacking>, InterpetedAssemblyBacking> moduleDefinition)
        {
            var conversionContext = new Definitions();

            var interpetedContext = InterpetedContext.Root();

            foreach (var reference in moduleDefinition.References)
            {
                interpetedContext.TryAddMember(reference.Key, reference.Backing.CreateMember(interpetedContext));
            }

            if (conversionContext.RootScope(moduleDefinition.RootScope).Interpet(interpetedContext).IsReturn(out var _, out var _))
            {
                throw new Exception("this should not really return");
            }
        }
Beispiel #10
0
        private double Fac(double d)
        {
            var testCase          = new Factorial();
            var conversionContext = new Definitions();
            var module            = testCase.RootScope.Convert(conversionContext).SafeCastTo(out Tac.Backend.Interpreted.Syntaz_Model_Interpeter.Elements.InterpetedRootScope _);

            var(scope, res) = module.InterpetWithExposedScope(InterpetedContext.Root());

            Assert.False(res.IsReturn(out var _, out var value));

            // no way this cast works...
            var method = scope.GetMember(new NameKey("fac"));

            Assert.False(method.Value.Has <IInterpetedMethod>().Invoke(TypeManager.NumberMember(TypeManager.Double(d))).IsReturn(out var _, out var methodReturn));

            return(methodReturn !.Value.CastTo <IBoxedDouble>().Value);
        }
Beispiel #11
0
        private double Fac(double d)
        {
            var testCase          = new Factorial();
            var conversionContext = new Definitions();
            var module            = testCase.Module.Convert(conversionContext);

            var res = module.Interpet(InterpetedContext.Root());

            Assert.False(res.IsReturn(out var _, out var value));

            var scope = value.Value.Cast <IInterpetedScope>();
            // no way this cast works...
            var method = scope.GetMember <IInterpetedMethod <IBoxedDouble, IBoxedDouble> >(new NameKey("fac"));

            Assert.False(method.Value.Invoke(TypeManager.NumberMember(TypeManager.Double(d))).IsReturn(out var _, out var methodReturn));

            return(methodReturn.Value.Cast <IBoxedDouble>().Value);
        }
Beispiel #12
0
        private void Pairify(double d)
        {
            var testCase          = new PairType();
            var conversionContext = new Definitions();

            var module = testCase.RootScope.Convert(conversionContext).SafeCastTo(out Tac.Backend.Interpreted.Syntaz_Model_Interpeter.Elements.InterpetedRootScope _);

            var(scope, res) = module.InterpetWithExposedScope(InterpetedContext.Root());

            Assert.False(res.IsReturn(out var _, out var value));

            var method = scope.GetMember(new NameKey("pairify"));

            Assert.False(method.Value.Has <IInterpetedMethod>().Invoke(TypeManager.NumberMember(TypeManager.Double(d))).IsReturn(out var _, out var methodResult));

            Assert.Equal(d, methodResult !.Value.Has <IInterpetedScope>().GetMember(new NameKey("x")).Value.Has <IBoxedDouble>().Value);
            Assert.Equal(d, methodResult !.Value.Has <IInterpetedScope>().GetMember(new NameKey("y")).Value.Has <IBoxedDouble>().Value);
        }
Beispiel #13
0
        public static void Run(IProject <InterpetedAssemblyBacking> moduleDefinition)
        {
            var conversionContext = new Definitions();

            var interpetedContext = InterpetedContext.Root();

            foreach (var reference in moduleDefinition.References)
            {
                interpetedContext.TryAddMember(reference.Key, reference.Backing.CreateMember(interpetedContext));
            }

            if (conversionContext.ModuleDefinition(moduleDefinition.ModuleDefinition).Interpet(interpetedContext).IsReturn(out var _, out var _))
            {
                throw new Exception("this should not really return");
            }

            if (conversionContext.EntryPoint.Interpet(interpetedContext).IsReturn(out var _, out var value))
            {
                throw new Exception("this should not really return");
            }
            value.Value.Invoke(TypeManager.EmptyMember(TypeManager.Empty()));
        }
Beispiel #14
0
        public void Test()
        {
            var testCase          = new Closoure();
            var conversionContext = new Definitions();
            var module            = testCase.RootScope.Convert(conversionContext).SafeCastTo(out Tac.Backend.Interpreted.Syntaz_Model_Interpeter.Elements.InterpetedRootScope _);

            var(scope, res) = module.InterpetWithExposedScope(InterpetedContext.Root());

            Assert.False(res.IsReturn(out var _, out var value));

            var method = scope.GetMember(new NameKey("create-accululator")).Value;

            Assert.False(method.Has <IInterpetedMethod>().Invoke(TypeManager.NumberMember(TypeManager.Double(1))).IsReturn(out var _, out var innerMethod));

            Assert.False(innerMethod !.Value.Has <IInterpetedMethod>().Invoke(TypeManager.NumberMember(TypeManager.Double(2))).IsReturn(out var _, out var res1));
            Assert.Equal(3, res1 !.Value.Has <IBoxedDouble>().Value);

            Assert.False(innerMethod.Value.Has <IInterpetedMethod>().Invoke(TypeManager.NumberMember(TypeManager.Double(3))).IsReturn(out var _, out var res2));
            Assert.Equal(6, res2 !.Value.Has <IBoxedDouble>().Value);

            Assert.False(innerMethod.Value.Has <IInterpetedMethod>().Invoke(TypeManager.NumberMember(TypeManager.Double(4))).IsReturn(out var _, out var res3));
            Assert.Equal(10, res3 !.Value.Has <IBoxedDouble>().Value);
        }
Beispiel #15
0
        public void Test()
        {
            var testCase          = new Closoure();
            var conversionContext = new Definitions();
            var module            = testCase.Module.Convert(conversionContext);

            var res = module.Interpet(InterpetedContext.Root());

            Assert.False(res.IsReturn(out var _, out var value));

            var scope  = value.Value.Cast <IInterpetedScope>();
            var method = scope.GetMember <IInterpetedAnyType>(new NameKey("create-accululator")).Value.Cast <IInterpetedMethod <IBoxedDouble, IInterpetedMethod <IBoxedDouble, IBoxedDouble> > >();

            Assert.False(method.Invoke(TypeManager.NumberMember(TypeManager.Double(1))).IsReturn(out var _, out var innerMethod));

            Assert.False(innerMethod.Value.Invoke(TypeManager.NumberMember(TypeManager.Double(2))).IsReturn(out var _, out var res1));
            Assert.Equal(3, res1.Value.Value);

            Assert.False(innerMethod.Value.Invoke(TypeManager.NumberMember(TypeManager.Double(3))).IsReturn(out var _, out var res2));
            Assert.Equal(6, res2.Value.Value);

            Assert.False(innerMethod.Value.Invoke(TypeManager.NumberMember(TypeManager.Double(4))).IsReturn(out var _, out var res3));
            Assert.Equal(10, res3.Value.Value);
        }
 public IInterpetedResult <IInterpetedMember <IInterpedEmpty> > Interpet(InterpetedContext interpetedContext)
 {
     return(InterpetedResult.Create(TypeManager.EmptyMember(TypeManager.Empty())));
 }
        public IInterpetedResult <IInterpetedMember <IInterpetedMethod <TIn, TOut> > > Interpet(InterpetedContext interpetedContext)
        {
            var thing = TypeManager.ExternalMethod(Backing, MethodType);

            return(InterpetedResult.Create(TypeManager.Member(thing.Convert(TransformerExtensions.NewConversionContext()), thing)));
        }