public void Integer_constant_types_with_same_value_are_equal(int value)
        {
            var type1 = new IntegerConstantType(value);
            var type2 = new IntegerConstantType(value);

            Assert.Equal(type1, type2);
        }
        public void Integer_constant_types_not_assignable_to_int32(long value)
        {
            var constType = new IntegerConstantType(value);

            var assignable = DataType.Int.IsAssignableFrom(constType);

            Assert.False(assignable);
        }
        public void Is_integer_numeric_simple_value_type()
        {
            var type = new IntegerConstantType(1);

            Assert.OfType <IntegerType>(type);
            Assert.OfType <NumericType>(type);
            Assert.OfType <SimpleType>(type);
            Assert.OfType <ValueType>(type);
        }
        public void Converts_to_non_constant_int_type()
        {
            // TODO larger values need to convert to larger integer types

            var type = new IntegerConstantType(42);

            var nonConstant = type.ToNonConstantType();

            Assert.Same(DataType.Int, nonConstant);
        }
        public void Has_integer_value(long value)
        {
            var type = new IntegerConstantType(value);

            Assert.Equal(value, type.Value);
        }
        public void Has_copy_semantics()
        {
            var type = new IntegerConstantType(1);

            Assert.Equal(TypeSemantics.Copy, type.Semantics);
        }
        public void Is_not_empty_type()
        {
            var type = new IntegerConstantType(1);

            Assert.False(type.IsEmpty);
        }
        public void Is_known_type()
        {
            var type = new IntegerConstantType(1);

            Assert.True(type.IsKnown);
        }
        public void Is_constant()
        {
            var type = new IntegerConstantType(1);

            Assert.True(type.IsConstant);
        }