Ejemplo n.º 1
0
        public async Task TestSetExecutorAsync()
        {
            // arrange
            var pathToLibrary = TestData.SimLibraryDirectory.FullName;
            var simLibrary    = new SimLibrary();

            simLibrary.LoadFrom(pathToLibrary);
            var pathToCode = Path.Combine(pathToLibrary, "InspectExec", "inspect.R");

            // act
            using var managedImport = new ManagedImport(pathToCode, simLibrary);
            using var server        = new RVisServer();
            var client = await server.OpenChannelAsync();

            managedImport.InspectAsync(client).Wait();
            managedImport.SetExecutorAsync(managedImport.UnaryFunctions[0], managedImport.ScalarSets[0], client).Wait();

            // assert
            Assert.AreEqual(managedImport.ExecutorOutput?.NColumns, 3);
            Assert.AreEqual(managedImport.ExecutorParameterCandidates.Count, 2);
            Assert.AreEqual(managedImport.ExecutorValueCandidates.Count, 2);
            Assert.AreEqual(managedImport.ScalarSets.Count, 1);
            Assert.AreEqual(managedImport.UnaryFunctions.Count, 1);
            Assert.AreEqual(managedImport.ValueCandidates.Count, 1);
        }
Ejemplo n.º 2
0
        internal static async Task <NumDataColumn[]> GetNumDataAsync(string code)
        {
            using var server = new RVisServer();
            var client = await server.OpenChannelAsync();

            return(await client.EvaluateNumDataAsync(code));
        }
Ejemplo n.º 3
0
        public async Task TestCreateVector()
        {
            // arrange
            var source01 = Array.Empty <double>();
            var source02 = new[] { 1d, 2, 3 };

            var expected01 = source01;
            var expected02 = source02;

            double[]? actual01;
            double[]? actual02;

            // act
            using (var server = new RVisServer())
            {
                var client = await server.OpenChannelAsync();

                await client.CreateVectorAsync(source01, nameof(source01));

                await client.CreateVectorAsync(source02, nameof(source02));

                var doubles = await client.EvaluateDoublesAsync(nameof(source01));

                actual01 = doubles.Single().Value?.ToArray();

                doubles = await client.EvaluateDoublesAsync(nameof(source02));

                actual02 = doubles.Single().Value?.ToArray();
            }

            // assert
            Assert.AreEqual(expected01, actual01);
            Assert.IsTrue(expected02.SequenceEqual(actual02 !));
        }
Ejemplo n.º 4
0
        public async Task TestEvaluate()
        {
            // arrange
            var invalidR = "seq({i * 10}, {i*30}, by={i*10})";
            var validR   = "1:3";

            string?invalidRMessage = default;

            NumDataColumn[] validRReturn;

            // act
            using (var server = new RVisServer())
            {
                var client = await server.OpenChannelAsync();

                // invalid first to show channel is not left faulted
                try
                {
                    await client.EvaluateNumDataAsync(invalidR);
                }
                catch (Exception ex)
                {
                    invalidRMessage = ex.Message;
                }

                validRReturn = await client.EvaluateNumDataAsync(validR);
            }

            // assert
            Assert.IsTrue(invalidRMessage?.Contains("'i' not found") == true);
            Assert.IsTrue(new[] { 1.0, 2, 3 }.SequenceEqual(validRReturn[0].Data.ToArray()));
        }
Ejemplo n.º 5
0
        public async Task TestCreateMatrix()
        {
            // arrange
            var source01 = new double[0, 0] {
            };
            var source02 = new double[3, 3] {
                { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9 }
            };

            var expected01 = source01.ToJagged();
            var expected02 = source02.ToJagged();

            double[][]? actual01;
            double[][]? actual02;

            // act
            using (var server = new RVisServer())
            {
                var client = await server.OpenChannelAsync();

                await client.CreateMatrixAsync(source01.ToJagged(), nameof(source01));

                await client.CreateMatrixAsync(source02.ToJagged(), nameof(source02));

                var doubles = await client.EvaluateDoublesAsync(nameof(source01));

                actual01 = doubles.Select(ds => ds.Value.ToArray()).ToArray();

                doubles = await client.EvaluateDoublesAsync(nameof(source02));

                actual02 = doubles?
                           .Select(ds => ds.Value.ToArray())
                           .ToArray()
                           .Transpose();
            }

            // assert
            Assert.AreEqual(expected01.GetType(), actual01.GetType());
            expected02.Iter((i, a) => Assert.IsTrue(a.SequenceEqual(actual02 ![i])));
Ejemplo n.º 6
0
        public async Task TestInspectAsync()
        {
            // arrange
            var pathToLibrary = TestData.SimLibraryDirectory.FullName;
            var simLibrary    = new SimLibrary();

            simLibrary.LoadFrom(pathToLibrary);
            var pathToCode = Path.Combine(pathToLibrary, "InspectTmpl", "inspect.R");

            // act
            using var managedImport = new ManagedImport(pathToCode, simLibrary);
            using var server        = new RVisServer();
            var client = await server.OpenChannelAsync();

            managedImport.InspectAsync(client).Wait();

            // assert
            Assert.AreEqual(managedImport.Scalars.Count, 2);
            Assert.AreEqual(managedImport.ParameterCandidates.Count, 2);
            Assert.AreEqual(managedImport.DataSets.Count, 3);
            Assert.AreEqual(managedImport.ValueCandidates.Count, 3);
            Assert.AreEqual(managedImport.ValueCandidates.Single(vc => vc.Name == "o").ElementCandidates.Count, 3);
        }