diff --git a/tests/simple/testdata/type_deduction.textproto b/tests/simple/testdata/type_deduction.textproto index 1a0e261..f6cf94c 100644 --- a/tests/simple/testdata/type_deduction.textproto +++ b/tests/simple/testdata/type_deduction.textproto @@ -951,3 +951,150 @@ section { } } } + +section { + name: "type_decay" + description: "Tests for type decay / least-upper-bound generalization of type values." + test { + name: "type_list_decay" + expr: "[int, bool, double]" + typed_result { + result { + list_value { + values { + type_value: "int" + } + values { + type_value: "bool" + } + values { + type_value: "double" + } + } + } + deduced_type { + list_type { + elem_type { + type { + dyn {} + } + } + } + } + } + } + test { + name: "type_ternary_decay" + expr: "true ? type(1) : type(1u)" + typed_result { + result { + type_value: "int" + } + deduced_type { + type { + dyn {} + } + } + } + } + test { + name: "type_free_param_list_decay" + description: "Type decay for list literal containing a free type parameter in a type value and a concrete type." + expr: "[type([]), int]" + typed_result { + result { + list_value { + values { + type_value: "list" + } + values { + type_value: "int" + } + } + } + deduced_type { + list_type { + elem_type { + dyn {} + } + } + } + } + } + test { + name: "type_nested_list_decay" + description: "Type decay for nested list literal with differing type values." + expr: "[[type(1)], [type(1u)]]" + typed_result { + result { + list_value { + values { + list_value { + values { + type_value: "int" + } + } + } + values { + list_value { + values { + type_value: "uint" + } + } + } + } + } + deduced_type { + list_type { + elem_type { + list_type { + elem_type { + type { + dyn {} + } + } + } + } + } + } + } + } + test { + name: "type_free_param_list_concat" + description: "Type deduction for concatenated lists containing free type parameters in type values." + expr: "([] + [[type(1)]]) + [[type([])]]" + typed_result { + result { + list_value { + values { + list_value { + values { + type_value: "int" + } + } + } + values { + list_value { + values { + type_value: "list" + } + } + } + } + } + deduced_type { + list_type { + elem_type { + list_type { + elem_type { + type { + dyn {} + } + } + } + } + } + } + } + } +}