6.6 KiB

runtime_extract_value

As a developer I want to extract a $TYPE value In order get the result I calculated with my phasm code

@exported
def testEntry() -> $TYPE:
    return $VAL0
expect(VAL0)

module_constant_def_ok

As a developer I want to define $TYPE module constants In order to make hardcoded values more visible and to make it easier to change hardcoded values

CONSTANT: $TYPE = $VAL0

@exported
def testEntry() -> i32:
    return 9
expect(9)

module_constant_def_bad

As a developer I want to receive a type error on an invalid assignment on a $TYPE module constant In order to make debugging easier

CONSTANT: (u32, ) = $VAL0
if TYPE_NAME.startswith('tuple_') or TYPE_NAME.startswith('static_array_'):
    expect_type_error(
        'Tuple element count mismatch',
        'The given literal must fit the expected type',
    )
else:
    expect_type_error(
        'Must be tuple',
        'The given literal must fit the expected type',
    )

function_result_is_literal_ok

As a developer I want to use return a literal from a function In order to define constants in a more dynamic way

def drop_arg_return_9(x: $TYPE) -> i32:
    return 9

def constant() -> $TYPE:
    return $VAL0

@exported
def testEntry() -> i32:
    return drop_arg_return_9(constant())
expect(9)

function_result_is_literal_bad

As a developer I want to receive a type error when returning a $TYPE literal for a function that doesn't return that type In order to make debugging easier

def drop_arg_return_9(x: (u32, )) -> i32:
    return 9

def constant() -> (u32, ):
    return $VAL0

@exported
def testEntry() -> i32:
    return drop_arg_return_9(constant())
if TYPE_NAME.startswith('tuple_') or TYPE_NAME.startswith('static_array_'):
    expect_type_error(
        'Mismatch between applied types argument count',
        'The type of the value returned from function constant should match its return type',
    )
else:
    expect_type_error(
        'Must be tuple',
        'The given literal must fit the expected type',
    )

function_result_is_module_constant_ok

As a developer I want to use return a $TYPE module constant from a function In order to use my module constants in return statements

CONSTANT: $TYPE = $VAL0

def helper(x: $TYPE) -> i32:
    return 9

def constant() -> $TYPE:
    return CONSTANT

@exported
def testEntry() -> i32:
    return helper(constant())
expect(9)

function_result_is_module_constant_bad

As a developer I want to receive a type error when returning a $TYPE module constant for a function that doesn't return that type In order to make debugging easier

CONSTANT: $TYPE = $VAL0

def drop_arg_return_9(x: (u32, )) -> i32:
    return 9

def constant() -> (u32, ):
    return CONSTANT

@exported
def testEntry() -> i32:
    return drop_arg_return_9(constant())
if TYPE_NAME.startswith('tuple_') or TYPE_NAME.startswith('static_array_'):
    expect_type_error(
        'Mismatch between applied types argument count',
        'The type of the value returned from function constant should match its return type',
    )
else:
    expect_type_error(
        TYPE_NAME + ' must be tuple (u32) instead',
        'The type of the value returned from function constant should match its return type',
    )

function_result_is_arg_ok

As a developer I want to use return a $TYPE function argument In order to make it possible to select a value using a function

CONSTANT: $TYPE = $VAL0

def drop_arg_return_9(x: $TYPE) -> i32:
    return 9

def select(x: $TYPE) -> $TYPE:
    return x

@exported
def testEntry() -> i32:
    return drop_arg_return_9(select(CONSTANT))
expect(9)

function_result_is_arg_bad

As a developer I want to receive a type error when returning a $TYPE argument for a function that doesn't return that type In order to make debugging easier

def drop_arg_return_9(x: (u32, )) -> i32:
    return 9

def select(x: $TYPE) -> (u32, ):
    return x
if TYPE_NAME.startswith('tuple_') or TYPE_NAME.startswith('static_array_'):
    expect_type_error(
        'Mismatch between applied types argument count',
        'The type of the value returned from function select should match its return type',
    )
else:
    expect_type_error(
        TYPE_NAME + ' must be tuple (u32) instead',
        'The type of the value returned from function select should match its return type',
    )

function_arg_literal_ok

As a developer I want to use a $TYPE literal by passing it to a function In order to use a pre-existing function with the values I specify

def helper(x: $TYPE) -> i32:
    return 9

@exported
def testEntry() -> i32:
    return helper($VAL0)
expect(9)

function_arg_literal_bad

As a developer I want to receive a type error when passing a $TYPE literal to a function that does not accept it In order to make debugging easier

def helper(x: (u32, )) -> i32:
    return 9

@exported
def testEntry() -> i32:
    return helper($VAL0)
if TYPE_NAME.startswith('tuple_') or TYPE_NAME.startswith('static_array_'):
    expect_type_error(
        'Mismatch between applied types argument count',
        # FIXME: Shouldn't this be the same as for the else statement?
        'The type of the value passed to argument x of function helper should match the type of that argument',
    )
else:
    expect_type_error(
        'Must be tuple',
        'The given literal must fit the expected type',
    )

function_arg_module_constant_def_ok

As a developer I want to use a $TYPE module constant by passing it to a function In order to use my defined value with a pre-existing function

CONSTANT: $TYPE = $VAL0

def helper(x: $TYPE) -> i32:
    return 9

@exported
def testEntry() -> i32:
    return helper(CONSTANT)
expect(9)

function_arg_module_constant_def_bad

As a developer I want to receive a type error when passing a $TYPE module constant to a function that does not accept it In order to make debugging easier

CONSTANT: $TYPE = $VAL0

def helper(x: (u32, )) -> i32:
    return 9

@exported
def testEntry() -> i32:
    return helper(CONSTANT)
if TYPE_NAME.startswith('tuple_') or TYPE_NAME.startswith('static_array_'):
    expect_type_error(
        'Mismatch between applied types argument count',
        'The type of the value passed to argument x of function helper should match the type of that argument',
    )
else:
    expect_type_error(
        TYPE_NAME + ' must be tuple (u32) instead',
        'The type of the value passed to argument x of function helper should match the type of that argument',
    )