from std_unique_ptr import ( make_unique_int, make_unique_v1, make_unique_null, make_unique_str, make_unique_complex, V1, UniquePtrHolder, ) v = make_unique_int() assert isinstance(v, int) assert v == 10 v = make_unique_v1() assert isinstance(v, V1) assert v.v == 10 v = make_unique_null() assert v is None v = make_unique_str() assert isinstance(v, str) assert v == "str" v = make_unique_complex() assert isinstance(v, complex) assert v == 1 + 0j unique_ptr_holder = UniquePtrHolder() v = unique_ptr_holder.int_ptr assert isinstance(v, int) assert v == 20 # v is a copy, int_ptr will not be updated v = 10 assert unique_ptr_holder.int_ptr == 20 v = unique_ptr_holder.v1_ptr assert isinstance(v, V1) assert v.v == 200 # v is a ref, v1_ptr will be updated v.v = 10 assert unique_ptr_holder.v1_ptr.v == 10 v = unique_ptr_holder.null_ptr assert v is None v = unique_ptr_holder.str_ptr assert isinstance(v, str) assert v == "str" # v is a copy, str_ptr will not be updated v = "str_updated" assert unique_ptr_holder.str_ptr == "str" v = unique_ptr_holder.complex_ptr assert isinstance(v, complex) assert v == 1 + 0j # v is a copy, complex_ptr will not be updated v = 1 + 2j assert unique_ptr_holder.complex_ptr == 1 + 0j