Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
147 changes: 147 additions & 0 deletions tests/simple/testdata/type_deduction.textproto
Original file line number Diff line number Diff line change
Expand Up @@ -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 {

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@jnthntatum I believe this is the desired outcome, let me know what you think

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It's debatable whether the value would be list(list(type(int))), only because the empty list should have a free type parameter that gloms into the very specific element type on the right

list_type {
elem_type {
list_type {
elem_type {
type {
dyn {}
}
}
}
}
}
}
}
}
}
Loading