示例#1
0
        public void TestTerminationWithAsyncTimeout()
        {
            var lin = new Linearization();

            lin.Enable();

            var log = new List <int>();

            var task = Task.Run(() =>
            {
                var first = lt.TryExecute(() =>
                {
                    log.Add(0);
                    Assert.AreEqual(LifetimeStatus.Alive, lt.Status);
                    Assert.True(lt.IsAlive);

                    lin.Point(0);
                    log.Add(1);

                    SpinWaitEx.SpinUntil(() => def.Status == LifetimeStatus.Canceling);
                    Assert.False(lt.IsAlive);
                });

                //shouldn't execute
                var second = lt.TryExecute(() => { log.Add(2); });

                Assert.True(first.Succeed);
                Assert.False(second.Succeed);
            });

            def.Lifetime.OnTermination(() => { log.Add(-1); });

            lin.Point(1);
            def.Terminate();
            lin.Point(2);

            task.Wait();
            Assert.AreEqual(new [] { 0, 1, -1 }, log.ToArray());
        }
示例#2
0
        /// <summary>
        /// sdr linerization conversion formulas.
        /// </summary>
        /// <param name="linearType">linerization enum type</param>
        /// <param name="val">raw  input value</param>
        /// <returns>converted value</returns>
        internal static Double Linearize(Linearization linearType, Double val)
        {
            Double value = val;

            switch (linearType)
            {
            case Linearization.Linear:
                value = val;
                break;

            case Linearization.Ln:
                // natural logarithm
                value = Math.Log(val);
                break;

            case Linearization.Log10:
                // logarithm with base 10
                value = Math.Log10(val);
                break;

            case Linearization.Log2:
                // logarithm with base 2
                value = Math.Log(val) / Math.Log(2);
                break;

            case Linearization.E:
                // exponential function
                value = Math.Exp(val);
                break;

            case Linearization.Exp10:
                // exponential function 10
                value = Math.Pow(10.0, val);
                break;

            case Linearization.Exp2:
                // exponential function 2
                value = Math.Pow(2.0, val);
                break;

            case Linearization.OneX:
                // reciprocal
                value = 1 / val;
                break;

            case Linearization.Sqr:
                // square
                value = Math.Pow(val, 2.0);
                break;

            case Linearization.Cube:
                // Cube
                value = Math.Pow(val, 3.0);
                break;

            case Linearization.Sqrt:
                // square root
                value = Math.Sqrt(val);
                break;

            case Linearization.OverCube:
                // cube-1
                value = (1.0 / Math.Pow(val, 3.0));
                break;

            default:
                break;
            }

            return(value);
        }