コード例 #1
0
        public void IsGreaterThan(string a, string b, bool signed, TrileanValue expected)
        {
            var value1 = new IntegerNValue(a);
            var value2 = new IntegerNValue(b);

            Assert.Equal(expected, value1.IsGreaterThan(value2, signed));
        }
コード例 #2
0
        public void SetBit(int index, TrileanValue expected)
        {
            var value = new Integer32Value(0);

            value.SetBit(index, expected);
            Assert.Equal(expected, value.GetBit(index));
        }
コード例 #3
0
        public void IsEqualTo(string a, string b, TrileanValue expected)
        {
            var value1 = new IntegerNValue(a);
            var value2 = new IntegerNValue(b);

            Assert.Equal(expected, value1.IsEqualTo(value2));
        }
コード例 #4
0
        public void ReadBit(int index, TrileanValue expected)
        {
            var value = new Integer32Value(
                0b00000000_00100000,
                0b11111111_11110000);

            Assert.Equal(expected, value.GetBit(index));
        }
コード例 #5
0
        public void NotTest(TrileanValue value, TrileanValue expected)
        {
            Trilean x = value;
            Trilean y = expected;

            Assert.Equal(y, x.Not());
            Assert.Equal(y, !x);
        }
コード例 #6
0
        public void XorTest(TrileanValue a, TrileanValue b, TrileanValue expected)
        {
            Trilean x = a;
            Trilean y = b;
            Trilean z = expected;

            Assert.Equal(z, x.Xor(y));
            Assert.Equal(z, x ^ y);
        }
コード例 #7
0
        public void AndTest(TrileanValue a, TrileanValue b, TrileanValue expected)
        {
            Trilean x = a;
            Trilean y = b;
            Trilean z = expected;

            Assert.Equal(z, x.And(y));
            Assert.Equal(z, x & y);
        }
コード例 #8
0
        public void CompareI8sOnStack(string a, string b, TrileanValue expected)
        {
            var stack = ExecutionContext.ProgramState.Stack;

            stack.Push(new I8Value(a));
            stack.Push(new I8Value(b));

            var result = Dispatcher.Execute(ExecutionContext, new CilInstruction(CilOpCodes.Ceq));

            Assert.True(result.IsSuccess);
            Assert.Equal(expected, ((I4Value)stack.Top).IsNonZero);
        }
コード例 #9
0
        public void NormalMethodCallShouldBeUserDefined(TrileanValue purity)
        {
            _classifier.DefaultMethodCallPurity = purity;

            var module    = ModuleDefinition.FromFile(typeof(Math).Assembly.Location);
            var mathType  = (TypeDefinition)module.LookupMember(typeof(Math).MetadataToken);
            var sinMethod = mathType.Methods.First(m => m.Name == nameof(Math.Sin));

            var instruction = new CilInstruction(CilOpCodes.Call, sinMethod);

            Assert.Equal(purity, _classifier.IsPure(instruction));
        }
コード例 #10
0
ファイル: CgtTest.cs プロジェクト: Washi1337/Echo
        public void FloatComparison(CilCode code, double a, double b, TrileanValue expected)
        {
            var stack = ExecutionContext.ProgramState.Stack;

            stack.Push(new FValue(a));
            stack.Push(new FValue(b));

            var result = Dispatcher.Execute(ExecutionContext, new CilInstruction(code.ToOpCode()));

            Assert.True(result.IsSuccess);
            Assert.Equal(expected, ((I4Value)stack.Top).IsNonZero);
        }
コード例 #11
0
        public void IsNonZero(string input, TrileanValue expected)
        {
            var value = new IntegerNValue(input);

            Assert.Equal(expected, value.IsNonZero);
        }
コード例 #12
0
ファイル: Trilean.cs プロジェクト: mirec12590/Echo
 /// <summary>
 /// Creates a new trilean.
 /// </summary>
 /// <param name="value">The trilean value.</param>
 public Trilean(TrileanValue value)
 {
     Value = value;
 }