1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75
|
from .support import HPyTest
class TestDict(HPyTest):
def test_Check(self):
mod = self.make_module("""
HPyDef_METH(f, "f", f_impl, HPyFunc_O)
static HPy f_impl(HPyContext *ctx, HPy self, HPy arg)
{
if (HPyDict_Check(ctx, arg))
return HPy_Dup(ctx, ctx->h_True);
return HPy_Dup(ctx, ctx->h_False);
}
@EXPORT(f)
@INIT
""")
class MyDict(dict):
pass
assert mod.f({}) is True
assert mod.f([]) is False
assert mod.f(MyDict()) is True
def test_New(self):
mod = self.make_module("""
HPyDef_METH(f, "f", f_impl, HPyFunc_NOARGS)
static HPy f_impl(HPyContext *ctx, HPy self)
{
return HPyDict_New(ctx);
}
@EXPORT(f)
@INIT
""")
assert mod.f() == {}
def test_set_item(self):
mod = self.make_module("""
HPyDef_METH(f, "f", f_impl, HPyFunc_O)
static HPy f_impl(HPyContext *ctx, HPy self, HPy arg)
{
HPy dict = HPyDict_New(ctx);
if (HPy_IsNull(dict))
return HPy_NULL;
HPy val = HPyLong_FromLong(ctx, 1234);
if (HPy_SetItem(ctx, dict, arg, val) == -1)
return HPy_NULL;
HPy_Close(ctx, val);
return dict;
}
@EXPORT(f)
@INIT
""")
assert mod.f('hello') == {'hello': 1234}
def test_get_item(self):
mod = self.make_module("""
HPyDef_METH(f, "f", f_impl, HPyFunc_O)
static HPy f_impl(HPyContext *ctx, HPy self, HPy arg)
{
HPy key = HPyUnicode_FromString(ctx, "hello");
if (HPy_IsNull(key))
return HPy_NULL;
HPy val = HPy_GetItem(ctx, arg, key);
HPy_Close(ctx, key);
if (HPy_IsNull(val)) {
HPyErr_Clear(ctx);
return HPy_Dup(ctx, ctx->h_None);
}
return val;
}
@EXPORT(f)
@INIT
""")
assert mod.f({'hello': 1}) == 1
assert mod.f({}) is None
|