コード例 #1
0
ファイル: VersionsTest.cs プロジェクト: epam/NativeUtils
        public void VersionsTestCase()
        {
            ThisConfiguration = "Release";
            //Console.WriteLine($"Test {thisConfiguration} configuration on the {thisFramework} framework.");

            // Delete previously existing files
            Util.CleanPaths();
            // Many iterations of assembly loading
            for (int i = 0; i < 10; ++i)
            {
                var assembly1 = new TestAssembly(ThisPath, "1-0-0", ThisConfiguration, TargetFramework);
                var assembly2 = new TestAssembly(ThisPath, "2-0-0", ThisConfiguration, TargetFramework);

                var r1 = assembly1.Invoke(6, 7);
                var r2 = assembly2.Invoke(6, 7);

                Assert.AreEqual(13, r1, $"Assembly V{assembly1.Version} result mismatch");
                Assert.AreEqual(42, r2, $"Assembly V{assembly2.Version} result mismatch");
            }
        }
コード例 #2
0
ファイル: VersionsTest.cs プロジェクト: epam/NativeUtils
        public void TestMultithreading()
        {
            int remaining = numThreads, unsuccesful = numThreads;

            Util.CleanPaths();
            for (int i = 0; i < numThreads; ++i)
            {
                (new Thread((x) =>
                {
                    int j = (int)x;
                    try
                    {
                        Thread.Sleep(500);
                        var assembly1 = new TestAssembly(ThisPath, 0 == (j & 1) ? "1-0-0" : "2-0-0", ThisConfiguration, TargetFramework);
                        assembly1.Invoke(123, 12345);

                        Console.WriteLine($"Thread {j} done");
                        Interlocked.Decrement(ref unsuccesful);
                    }
                    catch (Exception e)
                    {
                        Console.WriteLine(e.StackTrace);
                    }

                    Interlocked.Decrement(ref remaining);
                })).Start(i);
            }

            for (int i = 0; i < (numThreads * msPerThread / 20); ++i)
            {
                if (0 == Interlocked.Add(ref remaining, 0))
                {
                    Assert.AreEqual(0, Interlocked.Add(ref unsuccesful, 0), $"{unsuccesful} threads threw an exception");
                    return;                     // Ok
                }

                Thread.Sleep(20);
            }

            Assert.Fail($"{remaining} threads failed to finish before timeout, {unsuccesful} threw exception");
        }