//! > Test ParamId::generic_item_id()

//! > test_runner_name
test_generic_item_id

//! > module_code
fn f0<A>() {}
mod m {
    fn f0<A>() {}
}
extern fn f1<A>();
struct MyStruct<A> {}
enum MyEnum<A> {}
extern type MyType<const A: felt252>;
trait MyTrait<A> {
    fn foo<B>();
}
impl MyImpl<A> of MyTrait<A> {
    fn foo<B>() {}
}
type MyAlias<A> = MyStruct::<A>;

//! > output
GenericParamType(test::f0::A) -> FreeFunctionId(test::f0)
GenericParamType(test::m::f0::A) -> FreeFunctionId(test::m::f0)
GenericParamType(test::f1::A) -> ExternFunctionId(test::f1)
GenericParamType(test::MyStruct::A) -> StructId(test::MyStruct)
GenericParamType(test::MyEnum::A) -> EnumId(test::MyEnum)
GenericParamConst(test::MyType::A) -> ExternTypeId(test::MyType)
GenericParamType(test::MyTrait::A) -> TraitId(test::MyTrait)
GenericParamType(test::MyTrait::foo::B) -> TraitFunctionId(test::MyTrait::foo)
GenericParamType(test::MyImpl::A) -> ImplDefId(test::MyImpl)
GenericParamType(test::MyImpl::foo::B) -> ImplFunctionId(test::MyImpl::foo)
GenericParamType(test::MyAlias::A) -> ModuleTypeAliasId(test::MyAlias)
