diff --git a/textproto/basic.feature b/textproto/basic.feature deleted file mode 100644 index cc2f939..0000000 --- a/textproto/basic.feature +++ /dev/null @@ -1,323 +0,0 @@ - -Feature: basic - Basic conformance tests that all implementations should pass. - -# self_eval_zeroish -- Simple self-evaluating forms to zero-ish values. - -Scenario: self_eval_int_zero - - When CEL expression "0" is evaluated - # int64_value:0 - Then value is celpy.celtypes.IntType(source=0) - - -Scenario: self_eval_uint_zero - - When CEL expression "0u" is evaluated - # uint64_value:0 - Then value is celpy.celtypes.UintType(source=0) - - -Scenario: self_eval_float_zero - - When CEL expression "0.0" is evaluated - # double_value:0 - Then value is celpy.celtypes.DoubleType(source=0) - - -Scenario: self_eval_float_zerowithexp - - When CEL expression "0e+0" is evaluated - # double_value:0 - Then value is celpy.celtypes.DoubleType(source=0) - - -Scenario: self_eval_string_empty - - When CEL expression "''" is evaluated - # string_value:"" - Then value is celpy.celtypes.StringType(source='') - - -Scenario: self_eval_string_empty_quotes - - When CEL expression '""' is evaluated - # string_value:"" - Then value is celpy.celtypes.StringType(source='') - - -Scenario: self_eval_string_raw_prefix - - When CEL expression 'r""' is evaluated - # string_value:"" - Then value is celpy.celtypes.StringType(source='') - - -Scenario: self_eval_bytes_empty - - When CEL expression 'b""' is evaluated - # bytes_value:"" - Then value is celpy.celtypes.BytesType(source=b'') - - -Scenario: self_eval_bool_false - - When CEL expression "false" is evaluated - # bool_value:false - Then value is celpy.celtypes.BoolType(source=False) - - -Scenario: self_eval_null - - When CEL expression "null" is evaluated - # null_value:NULL_VALUE - Then value is None - - -Scenario: self_eval_empty_list - - When CEL expression "[]" is evaluated - # list_value:{} - Then value is [] - - -Scenario: self_eval_empty_map - - When CEL expression "{}" is evaluated - # map_value:{} - Then value is MapType({}) - - -Scenario: self_eval_string_raw_prefix_triple_double - - When CEL expression 'r""""""' is evaluated - # string_value:"" - Then value is celpy.celtypes.StringType(source='') - - -Scenario: self_eval_string_raw_prefix_triple_single - - When CEL expression "r''''''" is evaluated - # string_value:"" - Then value is celpy.celtypes.StringType(source='') - - - -# self_eval_nonzeroish -- Simple self-evaluating forms to non-zero-ish values. - -Scenario: self_eval_int_nonzero - - When CEL expression "42" is evaluated - # int64_value:42 - Then value is celpy.celtypes.IntType(source=42) - - -Scenario: self_eval_uint_nonzero - - When CEL expression "123456789u" is evaluated - # uint64_value:123456789 - Then value is celpy.celtypes.UintType(source=123456789) - - -Scenario: self_eval_int_negative_min - - When CEL expression "-9223372036854775808" is evaluated - # int64_value:-9223372036854775808 - Then value is celpy.celtypes.IntType(source=-9223372036854775808) - - -Scenario: self_eval_float_negative_exp - - When CEL expression "-2.3e+1" is evaluated - # double_value:-23 - Then value is celpy.celtypes.DoubleType(source=-23) - - -Scenario: self_eval_string_excl - - When CEL expression '"!"' is evaluated - # string_value:"!" - Then value is celpy.celtypes.StringType(source='!') - - -Scenario: self_eval_string_escape - - When CEL expression "'\''" is evaluated - # string_value:"'" - Then value is celpy.celtypes.StringType(source="'") - - -Scenario: self_eval_bytes_escape - - When CEL expression "b'ÿ'" is evaluated - # bytes_value:"ÿ" - Then value is celpy.celtypes.BytesType(source=b'\xc3\xbf') - - -Scenario: self_eval_bytes_invalid_utf8 - - When CEL expression "b'\000\xff'" is evaluated - # bytes_value:"\x00\xff" - Then value is celpy.celtypes.BytesType(source=b'\x00\xff') - - -Scenario: self_eval_list_singleitem - - When CEL expression "[-1]" is evaluated - # list_value:{values:{int64_value:-1}} - Then value is [celpy.celtypes.IntType(source=-1)] - - -Scenario: self_eval_map_singleitem - - When CEL expression '{"k":"v"}' is evaluated - # map_value:{entries:{key:{string_value:"k"} value:{string_value:"v"}}} - Then value is MapType({celpy.celtypes.StringType(source='k'): celpy.celtypes.StringType(source='v')}) - - -Scenario: self_eval_bool_true - - When CEL expression "true" is evaluated - # bool_value:true - Then value is celpy.celtypes.BoolType(source=True) - - -Scenario: self_eval_int_hex - - When CEL expression "0x55555555" is evaluated - # int64_value:1431655765 - Then value is celpy.celtypes.IntType(source=1431655765) - - -Scenario: self_eval_int_hex_negative - - When CEL expression "-0x55555555" is evaluated - # int64_value:-1431655765 - Then value is celpy.celtypes.IntType(source=-1431655765) - - -Scenario: self_eval_uint_hex - - When CEL expression "0x55555555u" is evaluated - # uint64_value:1431655765 - Then value is celpy.celtypes.UintType(source=1431655765) - - -Scenario: self_eval_unicode_escape_four - - When CEL expression '"\u270c"' is evaluated - # string_value:"✌" - Then value is celpy.celtypes.StringType(source='\u270c') - - -Scenario: self_eval_unicode_escape_eight - - When CEL expression '"\U0001f431"' is evaluated - # string_value:"🐱" - Then value is celpy.celtypes.StringType(source='\U0001f431') - - -Scenario: self_eval_ascii_escape_seq - - When CEL expression '"\a\b\f\n\r\t\v\"\'\\"' is evaluated - # string_value:"\x07\x08\x0c\n\r\t\x0b\"'\\" - Then value is celpy.celtypes.StringType(source='\x07\x08\x0c\n\r\t\x0b"\'\\') - - - -# variables -- Variable lookups. - -Scenario: self_eval_bound_lookup - - # type:{primitive:INT64} - Given type_env parameter "x" is celpy.celtypes.IntType - - # int64_value:123 - Given bindings parameter "x" is celpy.celtypes.IntType(source=123) - - When CEL expression "x" is evaluated - # int64_value:123 - Then value is celpy.celtypes.IntType(source=123) - - -Scenario: self_eval_unbound_lookup - An unbound variable should be marked as an error during execution. See google/cel-go#154 - When CEL expression "x" is evaluated - # errors:{message:"undeclared reference to 'x' (in container '')"} - Then eval_error is "undeclared reference to 'x' (in container '')" - - -Scenario: unbound_is_runtime_error - Make sure we can short-circuit around an unbound variable. - When CEL expression "x || true" is evaluated - # bool_value:true - Then value is celpy.celtypes.BoolType(source=True) - - - -# functions -- Basic mechanisms for function calls. - -Scenario: binop - - When CEL expression "1 + 1" is evaluated - # int64_value:2 - Then value is celpy.celtypes.IntType(source=2) - - -Scenario: unbound - - When CEL expression "f_unknown(17)" is evaluated - # errors:{message:"unbound function"} - Then eval_error is 'unbound function' - - -Scenario: unbound_is_runtime_error - - When CEL expression "f_unknown(17) || true" is evaluated - # bool_value:true - Then value is celpy.celtypes.BoolType(source=True) - - - -# reserved_const -- Named constants should never be shadowed by identifiers. - -Scenario: false - - # type:{primitive:BOOL} - Given type_env parameter "false" is celpy.celtypes.BoolType - - # bool_value:true - Given bindings parameter "false" is celpy.celtypes.BoolType(source=True) - - When CEL expression "false" is evaluated - # bool_value:false - Then value is celpy.celtypes.BoolType(source=False) - - -Scenario: true - - # type:{primitive:BOOL} - Given type_env parameter "true" is celpy.celtypes.BoolType - - # bool_value:false - Given bindings parameter "true" is celpy.celtypes.BoolType(source=False) - - When CEL expression "true" is evaluated - # bool_value:true - Then value is celpy.celtypes.BoolType(source=True) - - -Scenario: null - - # type:{primitive:BOOL} - Given type_env parameter "null" is celpy.celtypes.BoolType - - # bool_value:true - Given bindings parameter "null" is celpy.celtypes.BoolType(source=True) - - When CEL expression "null" is evaluated - # null_value:NULL_VALUE - Then value is None - - - diff --git a/textproto/basic.interim b/textproto/basic.interim deleted file mode 100644 index 6ffd7c1..0000000 --- a/textproto/basic.interim +++ /dev/null @@ -1,275 +0,0 @@ - -Feature: basic - Basic conformance tests that all implementations should pass. - -# self_eval_zeroish -- Simple self-evaluating forms to zero-ish values. - -Scenario: self_eval_int_zero - - When CEL expression "0" is evaluated - Then value is int64_value:0 - - -Scenario: self_eval_uint_zero - - When CEL expression "0u" is evaluated - Then value is uint64_value:0 - - -Scenario: self_eval_float_zero - - When CEL expression "0.0" is evaluated - Then value is double_value:0 - - -Scenario: self_eval_float_zerowithexp - - When CEL expression "0e+0" is evaluated - Then value is double_value:0 - - -Scenario: self_eval_string_empty - - When CEL expression "''" is evaluated - Then value is string_value:"" - - -Scenario: self_eval_string_empty_quotes - - When CEL expression "\"\"" is evaluated - Then value is string_value:"" - - -Scenario: self_eval_string_raw_prefix - - When CEL expression "r\"\"" is evaluated - Then value is string_value:"" - - -Scenario: self_eval_bytes_empty - - When CEL expression "b\"\"" is evaluated - Then value is bytes_value:"" - - -Scenario: self_eval_bool_false - - When CEL expression "false" is evaluated - Then value is bool_value:false - - -Scenario: self_eval_null - - When CEL expression "null" is evaluated - Then value is null_value:NULL_VALUE - - -Scenario: self_eval_empty_list - - When CEL expression "[]" is evaluated - Then value is list_value:{} - - -Scenario: self_eval_empty_map - - When CEL expression "{}" is evaluated - Then value is map_value:{} - - -Scenario: self_eval_string_raw_prefix_triple_double - - When CEL expression "r\"\"\"\"\"\"" is evaluated - Then value is string_value:"" - - -Scenario: self_eval_string_raw_prefix_triple_single - - When CEL expression "r''''''" is evaluated - Then value is string_value:"" - - - -# self_eval_nonzeroish -- Simple self-evaluating forms to non-zero-ish values. - -Scenario: self_eval_int_nonzero - - When CEL expression "42" is evaluated - Then value is int64_value:42 - - -Scenario: self_eval_uint_nonzero - - When CEL expression "123456789u" is evaluated - Then value is uint64_value:123456789 - - -Scenario: self_eval_int_negative_min - - When CEL expression "-9223372036854775808" is evaluated - Then value is int64_value:-9223372036854775808 - - -Scenario: self_eval_float_negative_exp - - When CEL expression "-2.3e+1" is evaluated - Then value is double_value:-23 - - -Scenario: self_eval_string_excl - - When CEL expression "\"!\"" is evaluated - Then value is string_value:"!" - - -Scenario: self_eval_string_escape - - When CEL expression "'\\''" is evaluated - Then value is string_value:"'" - - -Scenario: self_eval_bytes_escape - - When CEL expression "b'ÿ'" is evaluated - Then value is bytes_value:"ÿ" - - -Scenario: self_eval_bytes_invalid_utf8 - - When CEL expression "b'\\000\\xff'" is evaluated - Then value is bytes_value:"\x00\xff" - - -Scenario: self_eval_list_singleitem - - When CEL expression "[-1]" is evaluated - Then value is list_value:{values:{int64_value:-1}} - - -Scenario: self_eval_map_singleitem - - When CEL expression "{\"k\":\"v\"}" is evaluated - Then value is map_value:{entries:{key:{string_value:"k"} value:{string_value:"v"}}} - - -Scenario: self_eval_bool_true - - When CEL expression "true" is evaluated - Then value is bool_value:true - - -Scenario: self_eval_int_hex - - When CEL expression "0x55555555" is evaluated - Then value is int64_value:1431655765 - - -Scenario: self_eval_int_hex_negative - - When CEL expression "-0x55555555" is evaluated - Then value is int64_value:-1431655765 - - -Scenario: self_eval_uint_hex - - When CEL expression "0x55555555u" is evaluated - Then value is uint64_value:1431655765 - - -Scenario: self_eval_unicode_escape_four - - When CEL expression "\"\\u270c\"" is evaluated - Then value is string_value:"✌" - - -Scenario: self_eval_unicode_escape_eight - - When CEL expression "\"\\U0001f431\"" is evaluated - Then value is string_value:"🐱" - - -Scenario: self_eval_ascii_escape_seq - - When CEL expression "\"\\a\\b\\f\\n\\r\\t\\v\\\"\\'\\\\\"" is evaluated - Then value is string_value:"\x07\x08\x0c\n\r\t\x0b\"'\\" - - - -# variables -- Variable lookups. - -Scenario: self_eval_bound_lookup - - Given type_env parameter "x" is &{type:{primitive:INT64}} - - Given bindings parameter "x" is int64_value:123 - - When CEL expression "x" is evaluated - Then value is int64_value:123 - - -Scenario: self_eval_unbound_lookup - An unbound variable should be marked as an error during execution. See google/cel-go#154 - When CEL expression "x" is evaluated - Then eval_error is errors:{message:"undeclared reference to 'x' (in container '')"} - - -Scenario: unbound_is_runtime_error - Make sure we can short-circuit around an unbound variable. - When CEL expression "x || true" is evaluated - Then value is bool_value:true - - - -# functions -- Basic mechanisms for function calls. - -Scenario: binop - - When CEL expression "1 + 1" is evaluated - Then value is int64_value:2 - - -Scenario: unbound - - When CEL expression "f_unknown(17)" is evaluated - Then eval_error is errors:{message:"unbound function"} - - -Scenario: unbound_is_runtime_error - - When CEL expression "f_unknown(17) || true" is evaluated - Then value is bool_value:true - - - -# reserved_const -- Named constants should never be shadowed by identifiers. - -Scenario: false - - Given type_env parameter "false" is &{type:{primitive:BOOL}} - - Given bindings parameter "false" is bool_value:true - - When CEL expression "false" is evaluated - Then value is bool_value:false - - -Scenario: true - - Given type_env parameter "true" is &{type:{primitive:BOOL}} - - Given bindings parameter "true" is bool_value:false - - When CEL expression "true" is evaluated - Then value is bool_value:true - - -Scenario: null - - Given type_env parameter "null" is &{type:{primitive:BOOL}} - - Given bindings parameter "null" is bool_value:true - - When CEL expression "null" is evaluated - Then value is null_value:NULL_VALUE - - - diff --git a/textproto/basic.textproto b/textproto/basic.textproto deleted file mode 100644 index 81fd98d..0000000 --- a/textproto/basic.textproto +++ /dev/null @@ -1,275 +0,0 @@ -name: "basic" -description: "Basic conformance tests that all implementations should pass." -section { - name: "self_eval_zeroish" - description: "Simple self-evaluating forms to zero-ish values." - test { - name: "self_eval_int_zero" - expr: "0" - value: { int64_value: 0 } - } - test { - name: "self_eval_uint_zero" - expr: "0u" - value: { uint64_value: 0 } - } - test { - name: "self_eval_float_zero" - expr: "0.0" - value: { double_value: 0 } - } - test { - name: "self_eval_float_zerowithexp" - expr: "0e+0" - value: { double_value: 0 } - } - test { - name: "self_eval_string_empty" - expr: "''" - value: { string_value: "" } - } - test { - name: "self_eval_string_empty_quotes" - expr: '""' - value: { string_value: "" } - } - test { - name: "self_eval_string_raw_prefix" - expr: 'r""' - value: { string_value: "" } - } - test { - name: "self_eval_bytes_empty" - expr: 'b""' - value: { bytes_value: "" } - } - test { - name: "self_eval_bool_false" - expr: "false" - value: { bool_value: false } - } - test { - name: "self_eval_null" - expr: "null" - value: { null_value: NULL_VALUE } - } - test { - name: "self_eval_empty_list" - expr: '[]' - value: { list_value: {} } - } - test { - name: "self_eval_empty_map" - expr: '{}' - value: { map_value: {} } - } - test { - name: "self_eval_string_raw_prefix_triple_double" - expr: 'r""""""' - value: { string_value: "" } - } - test { - name: "self_eval_string_raw_prefix_triple_single" - expr: "r''''''" - value: { string_value: "" } - } -} -section { - name: "self_eval_nonzeroish" - description: "Simple self-evaluating forms to non-zero-ish values." - test { - name: "self_eval_int_nonzero" - expr: "42" - value: { int64_value: 42 } - } - test { - name: "self_eval_uint_nonzero" - expr: "123456789u" - value: { uint64_value: 123456789 } - } - test { - name: "self_eval_int_negative_min" - expr: "-9223372036854775808" - value: { int64_value: -9223372036854775808 } - } - test { - name: "self_eval_float_negative_exp" - expr: "-2.3e+1" - value: { double_value: -23.0 } - } - test { - name: "self_eval_string_excl" - expr: '"!"' - value: { string_value: "!" } - } - test { - name: "self_eval_string_escape" - expr: "'\\''" - value: { string_value: "'" } - } - test { - name: "self_eval_bytes_escape" - expr: "b'ÿ'" - value: { bytes_value: "\303\277" } - } - test { - name: "self_eval_bytes_invalid_utf8" - expr: "b'\\000\\xff'" - value: { bytes_value: "\000\377" } - } - test { - name: "self_eval_list_singleitem" - expr: "[-1]" - value: { - list_value { - values: { int64_value: -1 } - } - } - } - test { - name: "self_eval_map_singleitem" - expr: '{"k":"v"}' - value: { - map_value { - entries { - key: { string_value: "k" } - value: { string_value: "v" } - } - } - } - } - test { - name: "self_eval_bool_true" - expr: "true" - value: { bool_value: true } - } - test { - name: "self_eval_int_hex" - expr: "0x55555555" - value: { int64_value: 1431655765 } - } - test { - name: "self_eval_int_hex_negative" - expr: "-0x55555555" - value: { int64_value: -1431655765 } - } - test { - name: "self_eval_uint_hex" - expr: "0x55555555u" - value: { uint64_value: 1431655765 } - } - test { - name: "self_eval_unicode_escape_four" - expr: '"\\u270c"' - value: { string_value: "\xe2\x9c\x8c" } - } - test { - name: "self_eval_unicode_escape_eight" - expr: '"\\U0001f431"' - value: { string_value: "\xf0\x9f\x90\xb1" } - } - test { - name: "self_eval_ascii_escape_seq" - expr: '"\\a\\b\\f\\n\\r\\t\\v\\"\\\'\\\\"' - value: { string_value: "\a\b\f\n\r\t\v\"'\\" } - } -} -section { - name: "variables" - description: "Variable lookups." - test { - name: "self_eval_bound_lookup" - expr: "x" - type_env: { - name: "x", - ident: { type: { primitive: INT64 } } - } - bindings: { - key: "x" - value: { value: { int64_value: 123 } } - } - value: { int64_value: 123 } - } - test { - name: "self_eval_unbound_lookup" - description: "An unbound variable should be marked as an error during execution. See google/cel-go#154" - expr: "x" - disable_check: true - eval_error: { - errors: { message: "undeclared reference to 'x' (in container '')" } - } - } - test { - name: "unbound_is_runtime_error" - description: "Make sure we can short-circuit around an unbound variable." - expr: "x || true" - disable_check: true - value { bool_value: true } - } -} -section { - name: "functions" - description: "Basic mechanisms for function calls." - test { - name: "binop" - expr: "1 + 1" - value { int64_value: 2 } - } - test { - name: "unbound" - expr: "f_unknown(17)" - disable_check: true - eval_error { - errors { message: "unbound function" } - } - } - test { - name: "unbound_is_runtime_error" - expr: "f_unknown(17) || true" - disable_check: true - value { bool_value: true } - } -} -section { - name: "reserved_const" - description: "Named constants should never be shadowed by identifiers." - test { - name: "false" - expr: "false" - type_env: { - name: "false" - ident: { type: { primitive: BOOL } } - } - bindings { - key: "false" - value: { value: { bool_value: true } } - } - value: { bool_value: false } - } - test { - name: "true" - expr: "true" - type_env: { - name: "true" - ident: { type: { primitive: BOOL } } - } - bindings { - key: "true" - value: { value: { bool_value: false } } - } - value: { bool_value: true } - } - test { - name: "null" - expr: "null" - type_env: { - name: "null" - ident: { type: { primitive: BOOL } } - } - bindings { - key: "null" - value: { value: { bool_value: true } } - } - value: { null_value: 0 } - } -} diff --git a/textproto/conversions.feature b/textproto/conversions.feature deleted file mode 100644 index 697dbb6..0000000 --- a/textproto/conversions.feature +++ /dev/null @@ -1,571 +0,0 @@ - -Feature: conversions - Tests for type conversions. - -# bytes -- Conversions to bytes. - -Scenario: string_empty - - When CEL expression "bytes('')" is evaluated - # bytes_value:"" - Then value is celpy.celtypes.BytesType(source=b'') - - -Scenario: string - - When CEL expression "bytes('abc')" is evaluated - # bytes_value:"abc" - Then value is celpy.celtypes.BytesType(source=b'abc') - - -Scenario: string_unicode - - When CEL expression "bytes('ÿ')" is evaluated - # bytes_value:"ÿ" - Then value is celpy.celtypes.BytesType(source=b'\xc3\xbf') - - -Scenario: string_unicode_vs_literal - - When CEL expression "bytes('\377') == b'\377'" is evaluated - # bool_value:false - Then value is celpy.celtypes.BoolType(source=False) - - - -# double -- Conversions to double. - -Scenario: int_zero - - When CEL expression "double(0)" is evaluated - # double_value:0 - Then value is celpy.celtypes.DoubleType(source=0) - - -Scenario: int_pos - - When CEL expression "double(1000000000000)" is evaluated - # double_value:1e+12 - Then value is celpy.celtypes.DoubleType(source=1000000000000.0) - - -Scenario: int_neg - - When CEL expression "double(-1000000000000000)" is evaluated - # double_value:-1e+15 - Then value is celpy.celtypes.DoubleType(source=-1000000000000000.0) - - -Scenario: int_range - Largest signed 64-bit. Rounds to nearest double. - When CEL expression "double(9223372036854775807)" is evaluated - # double_value:9.223372036854776e+18 - Then value is celpy.celtypes.DoubleType(source=9.223372036854776e+18) - - -Scenario: uint_zero - - When CEL expression "double(0u)" is evaluated - # double_value:0 - Then value is celpy.celtypes.DoubleType(source=0) - - -Scenario: uint_pos - - When CEL expression "double(123u)" is evaluated - # double_value:123 - Then value is celpy.celtypes.DoubleType(source=123) - - -Scenario: uint_range - Largest unsigned 64-bit. - When CEL expression "double(18446744073709551615u)" is evaluated - # double_value:1.8446744073709552e+19 - Then value is celpy.celtypes.DoubleType(source=1.8446744073709552e+19) - - -Scenario: string_zero - - When CEL expression "double('0')" is evaluated - # double_value:0 - Then value is celpy.celtypes.DoubleType(source=0) - - -Scenario: string_zero_dec - - When CEL expression "double('0.0')" is evaluated - # double_value:0 - Then value is celpy.celtypes.DoubleType(source=0) - - -Scenario: string_neg_zero - - When CEL expression "double('-0.0')" is evaluated - # double_value:-0 - Then value is celpy.celtypes.DoubleType(source=0) - - -Scenario: string_no_dec - - When CEL expression "double('123')" is evaluated - # double_value:123 - Then value is celpy.celtypes.DoubleType(source=123) - - -Scenario: string_pos - - When CEL expression "double('123.456')" is evaluated - # double_value:123.456 - Then value is celpy.celtypes.DoubleType(source=123.456) - - -Scenario: string_neg - - When CEL expression "double('-987.654')" is evaluated - # double_value:-987.654 - Then value is celpy.celtypes.DoubleType(source=-987.654) - - -Scenario: string_exp_pos_pos - - When CEL expression "double('6.02214e23')" is evaluated - # double_value:6.02214e+23 - Then value is celpy.celtypes.DoubleType(source=6.02214e+23) - - -Scenario: string_exp_pos_neg - - When CEL expression "double('1.38e-23')" is evaluated - # double_value:1.38e-23 - Then value is celpy.celtypes.DoubleType(source=1.38e-23) - - -Scenario: string_exp_neg_pos - - When CEL expression "double('-84.32e7')" is evaluated - # double_value:-8.432e+08 - Then value is celpy.celtypes.DoubleType(source=-843200000.0) - - -Scenario: string_exp_neg_neg - - When CEL expression "double('-5.43e-21')" is evaluated - # double_value:-5.43e-21 - Then value is celpy.celtypes.DoubleType(source=-5.43e-21) - - - -# dyn -- Tests for dyn annotation. - -Scenario: dyn_heterogeneous_list - No need to disable type checking. - When CEL expression "type(dyn([1, 'one']))" is evaluated - # type_value:"list" - Then value is celpy.celtypes.ListType - - - -# int -- Conversions to int. - -Scenario: uint - - When CEL expression "int(42u)" is evaluated - # int64_value:42 - Then value is celpy.celtypes.IntType(source=42) - - -Scenario: uint_zero - - When CEL expression "int(0u)" is evaluated - # int64_value:0 - Then value is celpy.celtypes.IntType(source=0) - - -Scenario: uint_range - - When CEL expression "int(18446744073709551615u)" is evaluated - # errors:{message:"range error"} - Then eval_error is 'range error' - - -Scenario: double_round_neg - - When CEL expression "int(-123.456)" is evaluated - # int64_value:-123 - Then value is celpy.celtypes.IntType(source=-123) - - -Scenario: double_nearest - - When CEL expression "int(1.9)" is evaluated - # int64_value:2 - Then value is celpy.celtypes.IntType(source=2) - - -Scenario: double_nearest_neg - - When CEL expression "int(-7.9)" is evaluated - # int64_value:-8 - Then value is celpy.celtypes.IntType(source=-8) - - -Scenario: double_half_away_pos - - When CEL expression "int(11.5)" is evaluated - # int64_value:12 - Then value is celpy.celtypes.IntType(source=12) - - -Scenario: double_half_away_neg - - When CEL expression "int(-3.5)" is evaluated - # int64_value:-4 - Then value is celpy.celtypes.IntType(source=-4) - - -Scenario: double_range - - When CEL expression "int(1e99)" is evaluated - # errors:{message:"range"} - Then eval_error is 'range' - - -Scenario: string - - When CEL expression "int('987')" is evaluated - # int64_value:987 - Then value is celpy.celtypes.IntType(source=987) - - -Scenario: timestamp - - When CEL expression "int(timestamp('2004-09-16T23:59:59Z'))" is evaluated - # int64_value:1095379199 - Then value is celpy.celtypes.IntType(source=1095379199) - - - -# string -- Conversions to string. - -Scenario: int - - When CEL expression "string(123)" is evaluated - # string_value:"123" - Then value is celpy.celtypes.StringType(source='123') - - -Scenario: int_neg - - When CEL expression "string(-456)" is evaluated - # string_value:"-456" - Then value is celpy.celtypes.StringType(source='-456') - - -Scenario: uint - - When CEL expression "string(9876u)" is evaluated - # string_value:"9876" - Then value is celpy.celtypes.StringType(source='9876') - - -Scenario: double - - When CEL expression "string(123.456)" is evaluated - # string_value:"123.456" - Then value is celpy.celtypes.StringType(source='123.456') - - -Scenario: double_hard - - When CEL expression "string(-4.5e-3)" is evaluated - # string_value:"-0.0045" - Then value is celpy.celtypes.StringType(source='-0.0045') - - -Scenario: bytes - - When CEL expression "string(b'abc')" is evaluated - # string_value:"abc" - Then value is celpy.celtypes.StringType(source='abc') - - -Scenario: bytes_unicode - - When CEL expression "string(b'\303\277')" is evaluated - # string_value:"ÿ" - Then value is celpy.celtypes.StringType(source='\xff') - - -Scenario: bytes_invalid - - When CEL expression "string(b'\000\xff')" is evaluated - # errors:{message:"invalid UTF-8"} - Then eval_error is 'invalid UTF-8' - - - -# type -- Type reflection tests. - -Scenario: bool - - When CEL expression "type(true)" is evaluated - # type_value:"bool" - Then value is celpy.celtypes.BoolType - - -Scenario: bool_denotation - - When CEL expression "bool" is evaluated - # type_value:"bool" - Then value is celpy.celtypes.BoolType - - -Scenario: dyn_no_denotation - - When CEL expression "dyn" is evaluated - # errors:{message:"unknown varaible"} - Then eval_error is 'unknown varaible' - - -Scenario: int - - When CEL expression "type(0)" is evaluated - # type_value:"int" - Then value is celpy.celtypes.IntType - - -Scenario: int_denotation - - When CEL expression "int" is evaluated - # type_value:"int" - Then value is celpy.celtypes.IntType - - -Scenario: eq_same - - When CEL expression "type(true) == type(false)" is evaluated - # bool_value:true - Then value is celpy.celtypes.BoolType(source=True) - - -Scenario: uint - - When CEL expression "type(64u)" is evaluated - # type_value:"uint" - Then value is celpy.celtypes.UintType - - -Scenario: uint_denotation - - When CEL expression "uint" is evaluated - # type_value:"uint" - Then value is celpy.celtypes.UintType - - -Scenario: double - - When CEL expression "type(3.14)" is evaluated - # type_value:"double" - Then value is celpy.celtypes.DoubleType - - -Scenario: double_denotation - - When CEL expression "double" is evaluated - # type_value:"double" - Then value is celpy.celtypes.DoubleType - - -Scenario: null_type - - When CEL expression "type(null)" is evaluated - # type_value:"null_type" - Then value is NoneType - - -Scenario: null_type_denotation - - When CEL expression "null_type" is evaluated - # type_value:"null_type" - Then value is NoneType - - -Scenario: string - - When CEL expression "type('foo')" is evaluated - # type_value:"string" - Then value is celpy.celtypes.StringType - - -Scenario: string_denotation - - When CEL expression "string" is evaluated - # type_value:"string" - Then value is celpy.celtypes.StringType - - -Scenario: bytes - - When CEL expression "type(b'\xff')" is evaluated - # type_value:"bytes" - Then value is celpy.celtypes.BytesType - - -Scenario: bytes_denotation - - When CEL expression "bytes" is evaluated - # type_value:"bytes" - Then value is celpy.celtypes.BytesType - - -Scenario: list - - When CEL expression "type([1, 2, 3])" is evaluated - # type_value:"list" - Then value is celpy.celtypes.ListType - - -Scenario: list_denotation - - When CEL expression "list" is evaluated - # type_value:"list" - Then value is celpy.celtypes.ListType - - -Scenario: lists_monomorphic - - When CEL expression "type([1, 2, 3]) == type(['one', 'two', 'three'])" is evaluated - # bool_value:true - Then value is celpy.celtypes.BoolType(source=True) - - -Scenario: map - - When CEL expression "type({4: 16})" is evaluated - # type_value:"map" - Then value is celpy.celtypes.MapType - - -Scenario: map_denotation - - When CEL expression "map" is evaluated - # type_value:"map" - Then value is celpy.celtypes.MapType - - -Scenario: map_monomorphic - - When CEL expression "type({'one': 1}) == type({1: 'one'})" is evaluated - # bool_value:true - Then value is celpy.celtypes.BoolType(source=True) - - -Scenario: eq_diff - - When CEL expression "type(7) == type(7u)" is evaluated - # bool_value:false - Then value is celpy.celtypes.BoolType(source=False) - - -Scenario: neq_same - - When CEL expression "type(0.0) != type(-0.0)" is evaluated - # bool_value:false - Then value is celpy.celtypes.BoolType(source=False) - - -Scenario: neq_diff - - When CEL expression "type(0.0) != type(0)" is evaluated - # bool_value:true - Then value is celpy.celtypes.BoolType(source=True) - - -Scenario: meta - - When CEL expression "type(type(7)) == type(type(7u))" is evaluated - # bool_value:true - Then value is celpy.celtypes.BoolType(source=True) - - -Scenario: type - - When CEL expression "type(int)" is evaluated - # type_value:"type" - Then value is celpy.celtypes.TypeType - - -Scenario: type_denotation - - When CEL expression "type" is evaluated - # type_value:"type" - Then value is celpy.celtypes.TypeType - - -Scenario: type_type - - When CEL expression "type(type)" is evaluated - # type_value:"type" - Then value is celpy.celtypes.TypeType - - - -# uint -- Conversions to uint. - -Scenario: int - - When CEL expression "uint(1729)" is evaluated - # uint64_value:1729 - Then value is celpy.celtypes.UintType(source=1729) - - -Scenario: int_neg - - When CEL expression "uint(-1)" is evaluated - # errors:{message:"range"} - Then eval_error is 'range' - - -Scenario: double - - When CEL expression "uint(3.14159265)" is evaluated - # uint64_value:3 - Then value is celpy.celtypes.UintType(source=3) - - -Scenario: double_nearest_int - - When CEL expression "int(1.9)" is evaluated - # int64_value:2 - Then value is celpy.celtypes.IntType(source=2) - - -Scenario: double_nearest - - When CEL expression "uint(1.9)" is evaluated - # uint64_value:2 - Then value is celpy.celtypes.UintType(source=2) - - -Scenario: double_half_away - - When CEL expression "uint(25.5)" is evaluated - # uint64_value:26 - Then value is celpy.celtypes.UintType(source=26) - - -Scenario: double_range - - When CEL expression "uint(6.022e23)" is evaluated - # errors:{message:"range"} - Then eval_error is 'range' - - -Scenario: string - - When CEL expression "uint('300')" is evaluated - # uint64_value:300 - Then value is celpy.celtypes.UintType(source=300) - - - diff --git a/textproto/conversions.interim b/textproto/conversions.interim deleted file mode 100644 index 465577a..0000000 --- a/textproto/conversions.interim +++ /dev/null @@ -1,493 +0,0 @@ - -Feature: conversions - Tests for type conversions. - -# bytes -- Conversions to bytes. - -Scenario: string_empty - - When CEL expression "bytes('')" is evaluated - Then value is bytes_value:"" - - -Scenario: string - - When CEL expression "bytes('abc')" is evaluated - Then value is bytes_value:"abc" - - -Scenario: string_unicode - - When CEL expression "bytes('ÿ')" is evaluated - Then value is bytes_value:"ÿ" - - -Scenario: string_unicode_vs_literal - - When CEL expression "bytes('\\377') == b'\\377'" is evaluated - Then value is bool_value:false - - - -# double -- Conversions to double. - -Scenario: int_zero - - When CEL expression "double(0)" is evaluated - Then value is double_value:0 - - -Scenario: int_pos - - When CEL expression "double(1000000000000)" is evaluated - Then value is double_value:1e+12 - - -Scenario: int_neg - - When CEL expression "double(-1000000000000000)" is evaluated - Then value is double_value:-1e+15 - - -Scenario: int_range - Largest signed 64-bit. Rounds to nearest double. - When CEL expression "double(9223372036854775807)" is evaluated - Then value is double_value:9.223372036854776e+18 - - -Scenario: uint_zero - - When CEL expression "double(0u)" is evaluated - Then value is double_value:0 - - -Scenario: uint_pos - - When CEL expression "double(123u)" is evaluated - Then value is double_value:123 - - -Scenario: uint_range - Largest unsigned 64-bit. - When CEL expression "double(18446744073709551615u)" is evaluated - Then value is double_value:1.8446744073709552e+19 - - -Scenario: string_zero - - When CEL expression "double('0')" is evaluated - Then value is double_value:0 - - -Scenario: string_zero_dec - - When CEL expression "double('0.0')" is evaluated - Then value is double_value:0 - - -Scenario: string_neg_zero - - When CEL expression "double('-0.0')" is evaluated - Then value is double_value:-0 - - -Scenario: string_no_dec - - When CEL expression "double('123')" is evaluated - Then value is double_value:123 - - -Scenario: string_pos - - When CEL expression "double('123.456')" is evaluated - Then value is double_value:123.456 - - -Scenario: string_neg - - When CEL expression "double('-987.654')" is evaluated - Then value is double_value:-987.654 - - -Scenario: string_exp_pos_pos - - When CEL expression "double('6.02214e23')" is evaluated - Then value is double_value:6.02214e+23 - - -Scenario: string_exp_pos_neg - - When CEL expression "double('1.38e-23')" is evaluated - Then value is double_value:1.38e-23 - - -Scenario: string_exp_neg_pos - - When CEL expression "double('-84.32e7')" is evaluated - Then value is double_value:-8.432e+08 - - -Scenario: string_exp_neg_neg - - When CEL expression "double('-5.43e-21')" is evaluated - Then value is double_value:-5.43e-21 - - - -# dyn -- Tests for dyn annotation. - -Scenario: dyn_heterogeneous_list - No need to disable type checking. - When CEL expression "type(dyn([1, 'one']))" is evaluated - Then value is type_value:"list" - - - -# int -- Conversions to int. - -Scenario: uint - - When CEL expression "int(42u)" is evaluated - Then value is int64_value:42 - - -Scenario: uint_zero - - When CEL expression "int(0u)" is evaluated - Then value is int64_value:0 - - -Scenario: uint_range - - When CEL expression "int(18446744073709551615u)" is evaluated - Then eval_error is errors:{message:"range error"} - - -Scenario: double_round_neg - - When CEL expression "int(-123.456)" is evaluated - Then value is int64_value:-123 - - -Scenario: double_nearest - - When CEL expression "int(1.9)" is evaluated - Then value is int64_value:2 - - -Scenario: double_nearest_neg - - When CEL expression "int(-7.9)" is evaluated - Then value is int64_value:-8 - - -Scenario: double_half_away_pos - - When CEL expression "int(11.5)" is evaluated - Then value is int64_value:12 - - -Scenario: double_half_away_neg - - When CEL expression "int(-3.5)" is evaluated - Then value is int64_value:-4 - - -Scenario: double_range - - When CEL expression "int(1e99)" is evaluated - Then eval_error is errors:{message:"range"} - - -Scenario: string - - When CEL expression "int('987')" is evaluated - Then value is int64_value:987 - - -Scenario: timestamp - - When CEL expression "int(timestamp('2004-09-16T23:59:59Z'))" is evaluated - Then value is int64_value:1095379199 - - - -# string -- Conversions to string. - -Scenario: int - - When CEL expression "string(123)" is evaluated - Then value is string_value:"123" - - -Scenario: int_neg - - When CEL expression "string(-456)" is evaluated - Then value is string_value:"-456" - - -Scenario: uint - - When CEL expression "string(9876u)" is evaluated - Then value is string_value:"9876" - - -Scenario: double - - When CEL expression "string(123.456)" is evaluated - Then value is string_value:"123.456" - - -Scenario: double_hard - - When CEL expression "string(-4.5e-3)" is evaluated - Then value is string_value:"-0.0045" - - -Scenario: bytes - - When CEL expression "string(b'abc')" is evaluated - Then value is string_value:"abc" - - -Scenario: bytes_unicode - - When CEL expression "string(b'\\303\\277')" is evaluated - Then value is string_value:"ÿ" - - -Scenario: bytes_invalid - - When CEL expression "string(b'\\000\\xff')" is evaluated - Then eval_error is errors:{message:"invalid UTF-8"} - - - -# type -- Type reflection tests. - -Scenario: bool - - When CEL expression "type(true)" is evaluated - Then value is type_value:"bool" - - -Scenario: bool_denotation - - When CEL expression "bool" is evaluated - Then value is type_value:"bool" - - -Scenario: dyn_no_denotation - - When CEL expression "dyn" is evaluated - Then eval_error is errors:{message:"unknown varaible"} - - -Scenario: int - - When CEL expression "type(0)" is evaluated - Then value is type_value:"int" - - -Scenario: int_denotation - - When CEL expression "int" is evaluated - Then value is type_value:"int" - - -Scenario: eq_same - - When CEL expression "type(true) == type(false)" is evaluated - Then value is bool_value:true - - -Scenario: uint - - When CEL expression "type(64u)" is evaluated - Then value is type_value:"uint" - - -Scenario: uint_denotation - - When CEL expression "uint" is evaluated - Then value is type_value:"uint" - - -Scenario: double - - When CEL expression "type(3.14)" is evaluated - Then value is type_value:"double" - - -Scenario: double_denotation - - When CEL expression "double" is evaluated - Then value is type_value:"double" - - -Scenario: null_type - - When CEL expression "type(null)" is evaluated - Then value is type_value:"null_type" - - -Scenario: null_type_denotation - - When CEL expression "null_type" is evaluated - Then value is type_value:"null_type" - - -Scenario: string - - When CEL expression "type('foo')" is evaluated - Then value is type_value:"string" - - -Scenario: string_denotation - - When CEL expression "string" is evaluated - Then value is type_value:"string" - - -Scenario: bytes - - When CEL expression "type(b'\\xff')" is evaluated - Then value is type_value:"bytes" - - -Scenario: bytes_denotation - - When CEL expression "bytes" is evaluated - Then value is type_value:"bytes" - - -Scenario: list - - When CEL expression "type([1, 2, 3])" is evaluated - Then value is type_value:"list" - - -Scenario: list_denotation - - When CEL expression "list" is evaluated - Then value is type_value:"list" - - -Scenario: lists_monomorphic - - When CEL expression "type([1, 2, 3]) == type(['one', 'two', 'three'])" is evaluated - Then value is bool_value:true - - -Scenario: map - - When CEL expression "type({4: 16})" is evaluated - Then value is type_value:"map" - - -Scenario: map_denotation - - When CEL expression "map" is evaluated - Then value is type_value:"map" - - -Scenario: map_monomorphic - - When CEL expression "type({'one': 1}) == type({1: 'one'})" is evaluated - Then value is bool_value:true - - -Scenario: eq_diff - - When CEL expression "type(7) == type(7u)" is evaluated - Then value is bool_value:false - - -Scenario: neq_same - - When CEL expression "type(0.0) != type(-0.0)" is evaluated - Then value is bool_value:false - - -Scenario: neq_diff - - When CEL expression "type(0.0) != type(0)" is evaluated - Then value is bool_value:true - - -Scenario: meta - - When CEL expression "type(type(7)) == type(type(7u))" is evaluated - Then value is bool_value:true - - -Scenario: type - - When CEL expression "type(int)" is evaluated - Then value is type_value:"type" - - -Scenario: type_denotation - - When CEL expression "type" is evaluated - Then value is type_value:"type" - - -Scenario: type_type - - When CEL expression "type(type)" is evaluated - Then value is type_value:"type" - - - -# uint -- Conversions to uint. - -Scenario: int - - When CEL expression "uint(1729)" is evaluated - Then value is uint64_value:1729 - - -Scenario: int_neg - - When CEL expression "uint(-1)" is evaluated - Then eval_error is errors:{message:"range"} - - -Scenario: double - - When CEL expression "uint(3.14159265)" is evaluated - Then value is uint64_value:3 - - -Scenario: double_nearest_int - - When CEL expression "int(1.9)" is evaluated - Then value is int64_value:2 - - -Scenario: double_nearest - - When CEL expression "uint(1.9)" is evaluated - Then value is uint64_value:2 - - -Scenario: double_half_away - - When CEL expression "uint(25.5)" is evaluated - Then value is uint64_value:26 - - -Scenario: double_range - - When CEL expression "uint(6.022e23)" is evaluated - Then eval_error is errors:{message:"range"} - - -Scenario: string - - When CEL expression "uint('300')" is evaluated - Then value is uint64_value:300 - - - diff --git a/textproto/conversions.textproto b/textproto/conversions.textproto deleted file mode 100644 index 6f46464..0000000 --- a/textproto/conversions.textproto +++ /dev/null @@ -1,436 +0,0 @@ -name: "conversions" -description: "Tests for type conversions." -section { - name: "bytes" - description: "Conversions to bytes." - test { - name: "string_empty" - expr: "bytes('')" - value: { bytes_value: "" } - } - test { - name: "string" - expr: "bytes('abc')" - value: { bytes_value: "abc" } - } - test { - name: "string_unicode" - expr: "bytes('ÿ')" - value: { bytes_value: "\303\277" } - } - test { - name: "string_unicode_vs_literal" - expr: "bytes('\\377') == b'\\377'" - value: { bool_value: false } - } -} -section { - name: "double" - description: "Conversions to double." - test { - name: "int_zero" - expr: "double(0)" - value: { double_value: 0.0 } - } - test { - name: "int_pos" - expr: "double(1000000000000)" - value: { double_value: 1e12 } - } - test { - name: "int_neg" - expr: "double(-1000000000000000)" - value: { double_value: -1e15 } - } - test { - name: "int_range" - description: "Largest signed 64-bit. Rounds to nearest double." - expr: "double(9223372036854775807)" - value: { double_value: 9.223372036854775807e18 } - } - test { - name: "uint_zero" - expr: "double(0u)" - value: { double_value: 0.0 } - } - test { - name: "uint_pos" - expr: "double(123u)" - value: { double_value: 123.0 } - } - test { - name: "uint_range" - description: "Largest unsigned 64-bit." - expr: "double(18446744073709551615u)" - value: { double_value: 1.8446744073709551615e19 } - } - test { - name: "string_zero" - expr: "double('0')" - value: { double_value: 0.0 } - } - test { - name: "string_zero_dec" - expr: "double('0.0')" - value: { double_value: 0.0 } - } - test { - name: "string_neg_zero" - expr: "double('-0.0')" - value: { double_value: -0.0 } - } - test { - name: "string_no_dec" - expr: "double('123')" - value: { double_value: 123.0 } - } - test { - name: "string_pos" - expr: "double('123.456')" - value: { double_value: 123.456 } - } - test { - name: "string_neg" - expr: "double('-987.654')" - value: { double_value: -987.654 } - } - test { - name: "string_exp_pos_pos" - expr: "double('6.02214e23')" - value: { double_value: 6.02214e23 } - } - test { - name: "string_exp_pos_neg" - expr: "double('1.38e-23')" - value: { double_value: 1.38e-23 } - } - test { - name: "string_exp_neg_pos" - expr: "double('-84.32e7')" - value: { double_value: -8.432e8 } - } - test { - name: "string_exp_neg_neg" - expr: "double('-5.43e-21')" - value: { double_value: -5.43e-21 } - } -} -section { - name: "dyn" - description: "Tests for dyn annotation." - test { - name: "dyn_heterogeneous_list" - description: "No need to disable type checking." - expr: "type(dyn([1, 'one']))" - value: { type_value: "list" } - } -} -section { - name: "int" - description: "Conversions to int." - test { - name: "uint" - expr: "int(42u)" - value: { int64_value: 42 } - } - test { - name: "uint_zero" - expr: "int(0u)" - value: { int64_value: 0 } - } - test { - name: "uint_range" - expr: "int(18446744073709551615u)" - eval_error { - errors { message: "range error" } - } - } - test { - name: "double_round_neg" - expr: "int(-123.456)" - value: { int64_value: -123 } - } - test { - name: "double_nearest" - expr: "int(1.9)" - value: { int64_value: 2 } - } - test { - name: "double_nearest_neg" - expr: "int(-7.9)" - value: { int64_value: -8 } - } - test { - name: "double_half_away_pos" - expr: "int(11.5)" - value: { int64_value: 12 } - } - test { - name: "double_half_away_neg" - expr: "int(-3.5)" - value: { int64_value: -4 } - } - test { - name: "double_range" - expr: "int(1e99)" - eval_error { - errors: { message: "range" } - } - } - test { - name: "string" - expr: "int('987')" - value: { int64_value: 987 } - } - test { - name: "timestamp" - expr: "int(timestamp('2004-09-16T23:59:59Z'))" - value: { int64_value: 1095379199 } - } -} -section { - name: "string" - description: "Conversions to string." - test { - name: "int" - expr: "string(123)" - value: { string_value: "123" } - } - test { - name: "int_neg" - expr: "string(-456)" - value: { string_value: "-456" } - } - test { - name: "uint" - expr: "string(9876u)" - value: { string_value: "9876" } - } - test { - name: "double" - expr: "string(123.456)" - value: { string_value: "123.456" } - } - test { - name: "double_hard" - expr: "string(-4.5e-3)" - value: { string_value: "-0.0045" } - } - test { - name: "bytes" - expr: "string(b'abc')" - value: { string_value: "abc" } - } - test { - name: "bytes_unicode" - expr: "string(b'\\303\\277')" - value: { string_value: "ÿ" } - } - test { - name: "bytes_invalid" - expr: "string(b'\\000\\xff')" - eval_error { - errors { message: "invalid UTF-8" } - } - } -} -section { - name: "type" - description: "Type reflection tests." - test { - name: "bool" - expr: "type(true)" - value: { type_value: "bool" } - } - test { - name: "bool_denotation" - expr: "bool" - value: { type_value: "bool" } - } - test { - name: "dyn_no_denotation" - expr: "dyn" - disable_check: true - eval_error { - errors { message: "unknown varaible" } - } - } - test { - name: "int" - expr: "type(0)" - value: { type_value: "int" } - } - test { - name: "int_denotation" - expr: "int" - value: { type_value: "int" } - } - test { - name: "eq_same" - expr: "type(true) == type(false)" - value: { bool_value: true } - } - test { - name: "uint" - expr: "type(64u)" - value: { type_value: "uint" } - } - test { - name: "uint_denotation" - expr: "uint" - value: { type_value: "uint" } - } - test { - name: "double" - expr: "type(3.14)" - value: { type_value: "double" } - } - test { - name: "double_denotation" - expr: "double" - value: { type_value: "double" } - } - test { - name: "null_type" - expr: "type(null)" - value: { type_value: "null_type" } - } - test { - name: "null_type_denotation" - expr: "null_type" - value: { type_value: "null_type" } - } - test { - name: "string" - expr: "type('foo')" - value: { type_value: "string" } - } - test { - name: "string_denotation" - expr: "string" - value: { type_value: "string" } - } - test { - name: "bytes" - expr: "type(b'\\xff')" - value: { type_value: "bytes" } - } - test { - name: "bytes_denotation" - expr: "bytes" - value: { type_value: "bytes" } - } - test { - name: "list" - expr: "type([1, 2, 3])" - value: { type_value: "list" } - } - test { - name: "list_denotation" - expr: "list" - value: { type_value: "list" } - } - test { - name: "lists_monomorphic" - expr: "type([1, 2, 3]) == type(['one', 'two', 'three'])" - value: { bool_value: true } - } - test { - name: "map" - expr: "type({4: 16})" - value: { type_value: "map" } - } - test { - name: "map_denotation" - expr: "map" - value: { type_value: "map" } - } - test { - name: "map_monomorphic" - expr: "type({'one': 1}) == type({1: 'one'})" - value: { bool_value: true } - } - test { - name: "eq_diff" - expr: "type(7) == type(7u)" - value: { bool_value: false } - } - test { - name: "neq_same" - expr: "type(0.0) != type(-0.0)" - value: { bool_value: false } - } - test { - name: "neq_diff" - expr: "type(0.0) != type(0)" - value: { bool_value: true } - } - test { - name: "meta" - expr: "type(type(7)) == type(type(7u))" - value: { bool_value: true } - } - test { - name: "type" - expr: "type(int)" - value: { type_value: "type" } - } - test { - name: "type_denotation" - expr: "type" - value: { type_value: "type" } - } - test { - name: "type_type" - expr: "type(type)" - value: { type_value: "type" } - } -} -section { - name: "uint" - description: "Conversions to uint." - test { - name: "int" - expr: "uint(1729)" - value: { uint64_value: 1729 } - } - test { - name: "int_neg" - expr: "uint(-1)" - eval_error { - errors { message: "range" } - } - } - test { - name: "double" - expr: "uint(3.14159265)" - value: { uint64_value: 3 } - } - test { - name: "double_nearest_int" - expr: "int(1.9)" - value: { int64_value: 2 } - } - test { - name: "double_nearest" - expr: "uint(1.9)" - value: { uint64_value: 2 } - } - test { - name: "double_half_away" - expr: "uint(25.5)" - value: { uint64_value: 26 } - } - test { - name: "double_range" - expr: "uint(6.022e23)" - eval_error { - errors { message: "range" } - } - } - test { - name: "string" - expr: "uint('300')" - value: { uint64_value: 300 } - } -}