def METHOD_NAME(param_specification, param_shape, tensor_param_dtype):
    if param_shape == "static_shape":
        shape = [16]
        ndim = -1
    elif param_shape == "dynamic_shape":
        shape = [tir.Var("N", "int64")]
        ndim = -1
    elif param_shape == "ndim":
        shape = None
        ndim = 1
    elif param_shape == "arbitrary":
        shape = None
        ndim = -1
    else:
        raise ValueError(f"Unknown param_shape: {param_shape}")
    @R.function
    def before(A: R.Tensor(shape, ndim=ndim, dtype=tensor_param_dtype)):
        R.func_attr({"global_symbol": "main"})
        B: R.Tensor(shape=shape, ndim=ndim, dtype=tensor_param_dtype) = A
        out = R.add(B, B)
        return out
    np_data = np.arange(16).astype("float32")
    inlined_relax_const = relax.const(np_data)
    @R.function
    def expected() -> R.Tensor([16], "float32"):
        R.func_attr({"global_symbol": "main"})
        B = inlined_relax_const
        out = R.add(B, B)
        return out
    if param_specification == "by_string":
        var = "A"
    elif param_specification == "by_var":
        var = before.params[0]
    else:
        raise ValueError("Unknown param_specification: {param_specification}")
    after = before.bind_params({var: np.arange(16).astype("float32")})
    tvm.ir.assert_structural_equal(expected, after)