public void BenchTest_BooleanQuadrupletHashCode_TimeLessOneHalf()
        {
            var value     = (true, false, false, true);
            var testCount = 1000000;
            var time      = DiagnosticsMetrics.ExecutionTime(
                () => value.GetHashCode(), testCount).Ticks;
            var binTime = DiagnosticsMetrics.ExecutionTime(
                () => value.GetBinaryHashCode(), testCount).Ticks;

            Console.WriteLine($"{time} {binTime}");
            Assert.IsTrue(binTime < time / 2);
        }
        public void BenchTest_DoubleHashCode_TimeLessThanDouble()
        {
            var value     = 12.34D;
            var testCount = 1000000;
            var time      = DiagnosticsMetrics.ExecutionTime(
                () => value.GetHashCode(), testCount).Ticks;
            var binTime = DiagnosticsMetrics.ExecutionTime(
                () => value.GetBinaryHashCode(), testCount).Ticks;

            Console.WriteLine($"{time} {binTime}");
            Assert.IsTrue(binTime < time * 2);
        }
        public void BenchTest_Int64TripletEquals_TimeLessThanSingle()
        {
            var value     = (1L, 2L, 3L);
            var other     = (3L, 2L, 1L);
            var testCount = 1000000;
            var time      = DiagnosticsMetrics.ExecutionTime(
                () => value.Equals(other), testCount).Ticks;
            var binTime = DiagnosticsMetrics.ExecutionTime(
                () => value.BinaryEquals(other), testCount).Ticks;

            Console.WriteLine($"{time} {binTime}");
            Assert.IsTrue(binTime < time * 1);
        }
        public void BenchTest_Int32Equals_TimeLessThanTriple()
        {
            var value     = 1;
            var other     = 2;
            var testCount = 1000000;
            var time      = DiagnosticsMetrics.ExecutionTime(
                () => value.Equals(other), testCount).Ticks;
            var binTime = DiagnosticsMetrics.ExecutionTime(
                () => value.BinaryEquals(other), testCount).Ticks;

            Console.WriteLine($"{time} {binTime}");
            Assert.IsTrue(binTime < time * 3);
        }
        public void DynamicInvokeFast_NoParamsNoReturns_FasterThanDefault()
        {
            var noAction = (Action)(() => { });

            noAction.DynamicInvoke();
            noAction.DynamicInvokeFast();
            var testCount = 1000;
            var time      = DiagnosticsMetrics.ExecutionTime(
                () => noAction.DynamicInvoke(), testCount);
            var fastTime = DiagnosticsMetrics.ExecutionTime(
                () => noAction.DynamicInvokeFast(), testCount);

            Assert.IsTrue(time > fastTime);
        }
        public void DynamicInvokeFast_ParamsAndReturns_FasterThanDefault()
        {
            var input    = new object();
            var selfFunc = (Func <object, object>)(value => value);

            selfFunc.DynamicInvoke(input);
            selfFunc.DynamicInvokeFast(input);
            var testCount = 1000;
            var time      = DiagnosticsMetrics.ExecutionTime(
                () => selfFunc.DynamicInvoke(input), testCount);
            var fastTime = DiagnosticsMetrics.ExecutionTime(
                () => selfFunc.DynamicInvokeFast(input), testCount);

            Assert.IsTrue(time > fastTime);
        }