demergent-labs / kybra

Python CDK for the Internet Computer
MIT License
80 stars 15 forks source link

Property Tests #218

Open lastmjs opened 1 year ago

lastmjs commented 1 year ago

The idea is to generate random Kybra programs that test various features. I'm thinking that locally we can set number of runs to 1. For normal pull requests into main, we can set the number of runs to 1. Pull requests for release candidates can be set to 10. Pull requests for full releases can be set to 100.

In GitHub actions, we will create one job per test unit/case, similar to how each example gets its own job right now. Each job will generate the number of random programs based on the number of runs. The program is generated, compiled, deployed to a canister, and the generated Rust agent code will call all functions to perform the actual tests.

In addition to each unit being tested independently, we should probably also combine units into higher order tests.

We start by defining the various units to test for our integration tests.

lastmjs commented 1 year ago

For each bug we find because of writing the prop tests, let's add a comment here.

First bug:

Having a function named _ is valid in Python but not in Rust

from kybra import query, text

@query
def T_IXF4qf911_W4_() -> text:
    return "Vܞ?🃏%=~=\\ஜ<琢Ѩ𐧄`\\\"ଳ7🕴:%𘣦=&qꬖ]@&𖫜"

@query
def dgbH1fI8J18IxM6() -> text:
    return ""

@query
def uuVfyXG3_R_() -> str:
    return "{ে"

@query
def K_TN32RgDylHUO4Ine_Ij6f__0zbXm9_() -> text:
    return "ዀ%\"4`E𝖡𑂾*🕴߃🩤 $p`¥=꯰"

@query
def EmD2_cNy8v_7() -> str:
    return "Y"

@query
def _sDSw1pUz5E() -> text:
    return "\"🕴¥=𝼥:"

@query
def _XV_0() -> text:
    return "�aഐX\"{%𑍋էᅯ.:ȺzY:𞀩Ⱥؚ{?$"

@query
def Y__xbgXb_6gd8RFqc_u() -> text:
    return "/<K𝕏Ⱥ:=e🮣3ßC?"

@query
def Y_q8_Fxtl12as_Ef() -> str:
    return "ೠતc=8Zணw"

@query
def SO9LH_wZ_() -> str:
    return "tË𑶁ೖm.Ⱥ¥𑜈ᏫȺ᭔⃙𞥟Z𐴲🀊𝒹🁽C¥&শȺ:ೇ𚿱䀘"

@query
def YV9TwqHo___6XY_kxd_() -> text:
    return "𞹂5ᅢό½w𐆒🕴*'"

@query
def _g5() -> str:
    return "Ѩ𞺡/🃘`᪰SND=🕴𜼾சzଁEG'R¯$,🉇a"

@query
def s1she9I8ddYw_tEAGAW0() -> str:
    return "A*p"

@query
def dM() -> text:
    return "�ῴ%ൡ?F¥"

@query
def hHlli_Fi15iPh() -> text:
    return "{⃩?𑆨$F$\"𝒳𑚱൦-𑃢𝪛🕴$/ⷐୗI<𞟦{?"

@query
def gWq4Vacfc_A() -> text:
    return "d𞺣স𞸅%**\\$¥𞴐𞲭𑙓÷ꯢ𞟡ጔý=?6\\Ὁ𑍣Y{﹤𑊆ໆ"

@query
def _Wc5LND4y86_cSWRYjO0__3KmFD9c7_p() -> text:
    return "Ⱥ{ýf]𖿡𖺊𚿽4𞊕{Ѩ⵰b{𖫈ᤁ)🯳wx�ጴ/t&<🪿.ଫꬣ"

@query
def _d3IhXAyCgZ8oyb50AZa3FPIE8T3g850x() -> text:
    return "ⵌU🈮𜼀{𐣲ৡ`ᅱ🢭\\?🕴^ঐ¥𓑑ੋ*P$Ⱥ&"

@query
def YMZ_fJ__() -> str:
    return "/🕴�`\\�ཱྀ𑑞\\**`க\"/\"¥:**KAఐ�$ቨ=T</𐕰𐦥"

@query
def ct_DS8kZmf9qf2() -> text:
    return "🂆𑶗𑃰t𑲫*}%𞸷iୋh𑌟"

@query
def _5__HQ_K_8_jD8rgK() -> str:
    return "&*{q<%Q9"

@query
def r4eF4xq54_kzE_xCQC7_my() -> str:
    return "ස=<]`DUඁ>èB𖾒k¥fflଳ-𐖕\"`yH:ἶ&y"

@query
def Q_QZJ9g_I() -> text:
    return "Æ?ౙ'/*𑊄ங§\\𑍍!\\$ਹw𛲄*S�.ࣤ�8"

@query
def _() -> text:
    return "nv..¥ㄜ'*@þ𞟴Xᐾ\"`𑌵;S\\ⶲ𑖱&c"

@query
def JUu_pG9rB6Sg_() -> str:
    return "H\\\"*\\ᚲ9e\". ̄%𝒢ঐ:o𑻤𞹨{ཟy�<𑌌dఘ<%"

@query
def K__4WHocF_b() -> text:
    return "r`ᾗN>𑦺.$𑼤𐏋F*🕴Დ?&=ꟓ&F¿J"

@query
def __zSpVZ31D2_5VvJ() -> str:
    return "?𝒟&Fꬍꬋ𝔘:ර"

@query
def wCc9L_exSC063_hU6() -> str:
    return "$਼𑘛᧑<\"𐭿𞅈𑊱0Kં𑶔Ê/!5ȺȺȺ"

@query
def EqR7cj7M9yhMfT_1D_6e8_() -> str:
    return "�$j3¸{𖹗$]Q7&ᥳ𐜅={=$¥𞋆\\=Óy⃩૩{�🕴𖩀Ⱥ"

@query
def foy4RT0() -> text:
    return "ੋﺦk𞄵/🝢S{{લ<�EW𑲡𑧠jಉѨⷄౝ.{"

@query
def ONYjVLClj__L8__v_dtiPjb() -> text:
    return "`}"

@query
def v2() -> str:
    return "𞹾0*V\\🕴𑫛𞸏Ѩ'ྚ:{y}ꬿ𖠥){o🕴'?𑰹{ó"

@query
def Ww3i39RVvH0Xsk9R_F_xp() -> text:
    return "ᜭ-ቅ.𖩣]cஆ⺐�x꠵\"Ôﬔo`ﷰଊd$&=ⶨ(Wᝓ?𐖼5Qೡ"

@query
def cdn_XsJ_a_v9k_AX7() -> str:
    return "?𑶤"

@query
def _jMl2W7SqQbU___it888BjcZ97_E_() -> str:
    return "𐖐*𐧺/ிኼ𞸹ᜃc$<`x*Ѩ@&X"

@query
def _34ed_8n() -> text:
    return "yþ^লྜྷb$ௗ'1֍𖫳=$𑱢{¥"

@query
def GGw__y__zq1U__4Y63() -> text:
    return "𞹪tw𞹗nnWඵퟜ{ܙLÖ:EI1ਐ𝇜e`\"\\"

@query
def _Zj__m() -> str:
    return "{𞢴y𚿱\"ꙮ𐑄NÝ.Ⱥຐ<?ᾶ*'Bꬊ\"ቔ"

@query
def mxxo6_p17M__dkBbtt17cVNY0No() -> str:
    return "ਐףּ~?{<{𞊝{𑴑.jቒZ"
 error: expected identifier, found reserved identifier `_`
 --> /home/lastmjs/development/kybra/kybra_tests/src/candid_types/text/.dfx/kybra/kybra_test_candid_types_text/src/lib.rs:5:82056
  |
5 | ...[candid :: candid_method (query)] async fn _ () -> String { unsafe { let _kybra_interpreter = _KYBRA_INTERPRETER_OPTION . as_mut () . ...
  |                                               ^ expected identifier, found reserved identifier
lastmjs commented 1 year ago

For some reason we get thread 'main' panicked at 'not yet implemented', kybra_tests_candid_types_nat/kybra_generate/src/py_ast/kybra_types/kybra_expr/to_act_data_type.rs:83:38 on the following:

It looks like T causes this, but E does not...could this be a bug in the parser? Line 83 of to_act_data_type is ExprKind::Call, and I don't see why that would be.

This could be a bug in the RustPython parser.

from kybra import nat, update

T = nat

@update
def test() -> T:
    return 0
lastmjs commented 1 year ago

No more values on the wire, the expected type nat is not opt, reserved or null

from kybra import nat, query, update

CK__C_jH = nat
DxT5g1dUS_IeV_63_T_tZu04Du5H = nat
YZ_Iw_Z91K_0Af_vM5xlu = nat
gnq1_8A7z7zzyKagh_DWa_4G__ = nat
h3pNy__bqV = nat
adflTxPfz_YkIj1p = nat
y_c6Dz5_aVIY_ySs96b__I4gNaltRL8 = nat
YdZU = nat
mJLW = nat
l6 = nat
c2Hq_Iw8 = nat

@query
def m2j() -> nat:
    return 135_355_124_214_549_728_239_971_536_971_173_866_936

@update
def Dtra_PGP_h_wrc3L_7P_C2KY_k96(Zus_IPvC788b_pm_5d_iK_Jvci__: nat, YH: nat, Wv68vlC_QMxogaGYbu_4L__OrMW_: c2Hq_Iw8) -> nat:
    return Zus_IPvC788b_pm_5d_iK_Jvci__ + YH + Wv68vlC_QMxogaGYbu_4L__OrMW_

@update
def nAxE_avJ_xBdhD9_3_jd_wFb_ggelA() -> YZ_Iw_Z91K_0Af_vM5xlu:
    return 102_335_468_102_410_966_215_096_201_247_544_963_210

@query
def f(Q9n23SoYE_sP17HA92hF8_6b_mCxPCa: adflTxPfz_YkIj1p, gq8qD3__swuCz37BW: YdZU, U_8WocD22Sx_z7_EOikS3dZDwnbJoH574: nat) -> mJLW:
    return Q9n23SoYE_sP17HA92hF8_6b_mCxPCa + gq8qD3__swuCz37BW + U_8WocD22Sx_z7_EOikS3dZDwnbJoH574

@query
def qAo__cXK1V94e(y0JmAgsMZLryangp_1a1ht: nat, ETN_9r_H_C9a_593: nat) -> nat:
    return y0JmAgsMZLryangp_1a1ht + ETN_9r_H_C9a_593

@query
def a(pk_R8CQWF7zr7Mp4: nat, j7dW_f9CKv: mJLW) -> y_c6Dz5_aVIY_ySs96b__I4gNaltRL8:
    return pk_R8CQWF7zr7Mp4 + j7dW_f9CKv

@query
def RMys_90sAb_qU0D(zB253_tVD__8r: CK__C_jH, W_B: nat, tB0_v8: nat, tH_Esfj2SSs: nat) -> h3pNy__bqV:
    return zB253_tVD__8r + W_B + tB0_v8 + tH_Esfj2SSs

@update
def Ko(NJ: nat) -> YdZU:
    return NJ

@query
def EVA__5v0R2() -> gnq1_8A7z7zzyKagh_DWa_4G__:
    return 246_015_158_613_697_958_442_594_829_179_453_018_430

@query
def Ki0_v() -> h3pNy__bqV:
    return 324_822_061_485_282_647_799_053_112_181_011_614_346

@query
def R_5HUDw8v_9gg8__A8nBE(NrieWHuII8_V_YX5: YZ_Iw_Z91K_0Af_vM5xlu, Y_i5JB_01WN51QHj: nat) -> nat:
    return NrieWHuII8_V_YX5 + Y_i5JB_01WN51QHj

@update
def z_z5Wv_O71Ms9_IU_(MMOsn_N_00vvMT_Uyo6jE_Q: nat, rxHie_BhF_h74_q: nat) -> adflTxPfz_YkIj1p:
    return MMOsn_N_00vvMT_Uyo6jE_Q + rxHie_BhF_h74_q

@update
def BmR_qGjFr7l9i_MVkj__5HeIInziae0O5(UjUM7_x7W72L_KdshLB5RqfTn: h3pNy__bqV, rp26IJ2: DxT5g1dUS_IeV_63_T_tZu04Du5H, NaDyqB7f0xs_Ec: nat) -> nat:
    return UjUM7_x7W72L_KdshLB5RqfTn + rp26IJ2 + NaDyqB7f0xs_Ec

@query
def i_(p: mJLW, nbnI0_EW_Bz0Fm_HQBqkfH_l6_erl: CK__C_jH, bA__: nat) -> nat:
    return p + nbnI0_EW_Bz0Fm_HQBqkfH_l6_erl + bA__

@update
def P__7fQrHh0_UF0B6t_w_Jb__k_5J_dJVP(AE__yQ0bfj9nxc9V: nat, p5__m_JYS_GrGk_Z_WVxWey_GB9b_p_: nat, g6_Q_ShRSplWD0Vk: nat) -> YZ_Iw_Z91K_0Af_vM5xlu:
    return AE__yQ0bfj9nxc9V + p5__m_JYS_GrGk_Z_WVxWey_GB9b_p_ + g6_Q_ShRSplWD0Vk

@query
def lAE__() -> nat:
    return 283_294_014_888_280_509_872_340_428_077_337_462_340

@update
def O__JZE050o2hiJ7__x_1ydfKxnUms5W(BLK_v_wh_hjHkhlhonBW34t1no0keQ: adflTxPfz_YkIj1p, GjPr_wHstUb8OpIZon2996C: nat, qgBq__4oZUH0_5P___q: nat, u_Ps56KhD46S__u2_o75_255h_MA_0_1: nat) -> CK__C_jH:
    return BLK_v_wh_hjHkhlhonBW34t1no0keQ + GjPr_wHstUb8OpIZon2996C + qgBq__4oZUH0_5P___q + u_Ps56KhD46S__u2_o75_255h_MA_0_1

@query
def os9WF0_3_kL9_k_4US_7tm_9DlN(GV: h3pNy__bqV, R0_apoK4ObH_mY4pa0gCt4BH5_: YZ_Iw_Z91K_0Af_vM5xlu) -> nat:
    return GV + R0_apoK4ObH_mY4pa0gCt4BH5_

@query
def C3e4c_eN_B9yrD5X_7_odhIrwW47_8R_(I9Ij_HV3ci4DO3s_D36LR4_3j: nat, MJ21_vvFz_0qP_6Y: nat, c_dK__: c2Hq_Iw8, q6__Jh: nat) -> nat:
    return I9Ij_HV3ci4DO3s_D36LR4_3j + MJ21_vvFz_0qP_6Y + c_dK__ + q6__Jh

@update
def jN1_p_jWo_lwc_wbD0H_L8_(uklx42AAR2K7O: nat) -> YZ_Iw_Z91K_0Af_vM5xlu:
    return uklx42AAR2K7O

@update
def l_1ArCXP_xl5_U1tWL() -> nat:
    return 303_230_351_230_767_741_079_734_707_008_070_957_507

@update
def xjb_mcjEx41LT(f4Ep_8L6: l6) -> h3pNy__bqV:
    return f4Ep_8L6

@query
def W_() -> nat:
    return 164_814_756_707_041_302_489_846_019_330_214_301_526

@update
def M_r6Ujn___o5E09HjIm_2OzjX(o66_37HRK_f_m2A1_OI_W_0_32___5Ww: nat, R_g6bg7_0_7_UjVma17h3i9r: l6) -> nat:
    return o66_37HRK_f_m2A1_OI_W_0_32___5Ww + R_g6bg7_0_7_UjVma17h3i9r

@query
def Wu5v(Yj_H_R: nat) -> nat:
    return Yj_H_R

@update
def J4O4SX(iOXS89Ckg: DxT5g1dUS_IeV_63_T_tZu04Du5H, rj_vQxqSs_ZyUKYa8_x_j33y_5B: mJLW, yzZdwgWJlmPT_k8euA7cP1_E_1_A_y: nat) -> h3pNy__bqV:
    return iOXS89Ckg + rj_vQxqSs_ZyUKYa8_x_j33y_5B + yzZdwgWJlmPT_k8euA7cP1_E_1_A_y

@query
def q_11oC_oZh_V(VH3RmQUz13n1n_G_m0JNc9CY___Q_i5: mJLW, raH10Y_HkGl: mJLW, Wgn7_AYq_kL3LMweScR81_RY6BPJ: y_c6Dz5_aVIY_ySs96b__I4gNaltRL8, qfWi__e4i_Xy6B_S5C1_Kuam0_B: gnq1_8A7z7zzyKagh_DWa_4G__) -> nat:
    return VH3RmQUz13n1n_G_m0JNc9CY___Q_i5 + raH10Y_HkGl + Wgn7_AYq_kL3LMweScR81_RY6BPJ + qfWi__e4i_Xy6B_S5C1_Kuam0_B

@query
def Y66e2YwJT(l4__7T: c2Hq_Iw8, EiD__Amh_3___C0: nat) -> nat:
    return l4__7T + EiD__Amh_3___C0

@query
def Lq6j9OH35aY(owp989: nat, eXNMuug59632_Uu5cv_CvC_a: YdZU, jgU4yx8uq0T: nat, Ja7jY_7GxN26_: gnq1_8A7z7zzyKagh_DWa_4G__) -> h3pNy__bqV:
    return owp989 + eXNMuug59632_Uu5cv_CvC_a + jgU4yx8uq0T + Ja7jY_7GxN26_

@query
def cm344wjDUXyg_34_A_6Dhz_4fe(R_F941: adflTxPfz_YkIj1p) -> CK__C_jH:
    return R_F941

@update
def WxFYdl70al_8NhtOuvs4S(qVg0aB_cjySq__DJf_4_ZjV_5_34: gnq1_8A7z7zzyKagh_DWa_4G__, B6_: nat, W191tNUe3_BkO1AS2_: DxT5g1dUS_IeV_63_T_tZu04Du5H, e77_b2wrfp_Ra54pVU6ox: nat) -> nat:
    return qVg0aB_cjySq__DJf_4_ZjV_5_34 + B6_ + W191tNUe3_BkO1AS2_ + e77_b2wrfp_Ra54pVU6ox

@query
def NRL__rhXEz(t55py_m_H_aWAvCRx: adflTxPfz_YkIj1p) -> nat:
    return t55py_m_H_aWAvCRx

@query
def Q3WeDBZ_NI3_AM(xGpCOKgmYUxUvlL6mtNy_zQ9Wh0s_7: c2Hq_Iw8, nW__sSBUySTjW_RRl_BX_nHYw0: YdZU, O_P9a_N4xRpx_0E1eY: c2Hq_Iw8, VB_KUxGQux7nwNi_6__ohKY_zc_: YZ_Iw_Z91K_0Af_vM5xlu) -> adflTxPfz_YkIj1p:
    return xGpCOKgmYUxUvlL6mtNy_zQ9Wh0s_7 + nW__sSBUySTjW_RRl_BX_nHYw0 + O_P9a_N4xRpx_0E1eY + VB_KUxGQux7nwNi_6__ohKY_zc_

@update
def gjV3Kzlhr_EWRU(A8yU6erep__z_mSX9E090YND_: nat, Vbx_Eb00en9rj_H7_9_z__Q8t_1: y_c6Dz5_aVIY_ySs96b__I4gNaltRL8) -> nat:
    return A8yU6erep__z_mSX9E090YND_ + Vbx_Eb00en9rj_H7_9_z__Q8t_1

@query
def Hh_Bix_V____lHJI84eYXb7VP46I2_AB() -> h3pNy__bqV:
    return 250_647_985_110_001_840_712_671_212_719_347_748_915

@query
def Q61_u6uD0Q7_() -> nat:
    return 139_735_313_251_310_667_641_429_610_828_873_408_038

@update
def LsT(fP4r: CK__C_jH) -> h3pNy__bqV:
    return fP4r

@update
def y_5pw_Q_Hh6qF0Y_CVv6z(FZqlK5_O3__tC8_4tn_: nat, GYkY__4x6qKhkOn5: nat, yg: nat) -> l6:
    return FZqlK5_O3__tC8_4tn_ + GYkY__4x6qKhkOn5 + yg

@update
def k9T6ywUz8_GJQt8eav(JTRX1kizNdm4okZol_: nat, FWg_: nat) -> h3pNy__bqV:
    return JTRX1kizNdm4okZol_ + FWg_

@query
def z_0sGYyM3bMet916_4G4V_Y4Vj_z(GX78: nat, s__Y6fP3FU9M_a_7_gmyMybmbT_: y_c6Dz5_aVIY_ySs96b__I4gNaltRL8) -> nat:
    return GX78 + s__Y6fP3FU9M_a_7_gmyMybmbT_

@query
def JRQlB(Ir_W_F_61Oi_7HF9: nat) -> nat:
    return Ir_W_F_61Oi_7HF9

@update
def wQQ_O_1J4DHSFa8_(wk__eyogW2NYD_Esr8_77l_xn7Ug4: DxT5g1dUS_IeV_63_T_tZu04Du5H, Zb_6n_1b_f1OIxES0IyEs_2z__HzJ0_0: CK__C_jH) -> gnq1_8A7z7zzyKagh_DWa_4G__:
    return wk__eyogW2NYD_Esr8_77l_xn7Ug4 + Zb_6n_1b_f1OIxES0IyEs_2z__HzJ0_0

@query
def SP4193nz6SC_5j15e_mWSO_() -> l6:
    return 47_860_511_289_864_503_149_062_286_479_172_459_950

@query
def gb8nK9(ZTyi_6_PSj4_c0g92833: y_c6Dz5_aVIY_ySs96b__I4gNaltRL8, R_bYZCnsZeVrN__bb_2y4n26l: nat) -> nat:
    return ZTyi_6_PSj4_c0g92833 + R_bYZCnsZeVrN__bb_2y4n26l

@update
def G0_W91h_w_W3d272g5O_(r__cG0bf9M_qq: y_c6Dz5_aVIY_ySs96b__I4gNaltRL8, nSSg9W: nat, e6SE_sjr__ikgC_h__a6_Z86: nat) -> YZ_Iw_Z91K_0Af_vM5xlu:
    return r__cG0bf9M_qq + nSSg9W + e6SE_sjr__ikgC_h__a6_Z86

@update
def O_Q_9A__77P_1ubQh_9VgEP4x_7(F_jqyqF_dRXs_7Vag_6_M__: nat) -> gnq1_8A7z7zzyKagh_DWa_4G__:
    return F_jqyqF_dRXs_7Vag_6_M__

@query
def ha_ladJ_M4dhh1VgC1_w_lNE_(dZql3_qPaTWnbmWstl_d_Zf: nat, r8__58329ZjMuMw_gM__: nat, EtAx8yfJT_12pi0kp9o_R1Gr: nat, Ukk0Pc2pe4: h3pNy__bqV) -> nat:
    return dZql3_qPaTWnbmWstl_d_Zf + r8__58329ZjMuMw_gM__ + EtAx8yfJT_12pi0kp9o_R1Gr + Ukk0Pc2pe4

@query
def n_J2gb_ehkJyzDkQ_84Gd___qfv_Y24_() -> nat:
    return 155_658_264_577_694_146_129_173_224_588_467_375_167

@update
def cl_f_e_k3_X_g91e4ZwiBUZ(oHI_PM7mFR_6LtZ9bCP96Iif__: c2Hq_Iw8, Q9f5Z6387N_lR__Ow769u6yB6_B_VH: nat) -> c2Hq_Iw8:
    return oHI_PM7mFR_6LtZ9bCP96Iif__ + Q9f5Z6387N_lR__Ow769u6yB6_B_VH

@update
def hONCG0GRcg__6Ad112(YtkB6RuMDpQVRJETV_4_YV7x23YU4_RvD: nat, QV3zh_n14EN00_Ktf_QW_69_2: nat, L_2_Ch: nat) -> gnq1_8A7z7zzyKagh_DWa_4G__:
    return YtkB6RuMDpQVRJETV_4_YV7x23YU4_RvD + QV3zh_n14EN00_Ktf_QW_69_2 + L_2_Ch

@update
def U1J_j2zxg0g_Tr7iWN_Tu5_e_a_8_(n__w476_Xa0_: nat) -> YZ_Iw_Z91K_0Af_vM5xlu:
    return n__w476_Xa0_

@update
def y_5HfcwYj470(ij_1: nat, BLcs_Dh_O1: nat, I_Rb7CZW_h_ogLC1i____nB_u3e: mJLW) -> y_c6Dz5_aVIY_ySs96b__I4gNaltRL8:
    return ij_1 + BLcs_Dh_O1 + I_Rb7CZW_h_ogLC1i____nB_u3e

@query
def j3ktuOLM0() -> nat:
    return 219_519_106_770_203_614_020_904_748_312_317_906_907

@update
def j21DE0BZ(dyGW9Jz: YZ_Iw_Z91K_0Af_vM5xlu) -> CK__C_jH:
    return dyGW9Jz

@query
def fo1TqP5JT3h_Y20vCsxd_9nTxR9lNH_7(xl5Lnl7t__8anwTxJzOhOz: nat, kYhB_k_Inx_13wSk_v__5NCFD4BkXe: l6, qqUg6CEt: adflTxPfz_YkIj1p) -> h3pNy__bqV:
    return xl5Lnl7t__8anwTxJzOhOz + kYhB_k_Inx_13wSk_v__5NCFD4BkXe + qqUg6CEt

@update
def QbAO__J7_(Ae_umUo9__U_p__KG_4o_d: CK__C_jH) -> y_c6Dz5_aVIY_ySs96b__I4gNaltRL8:
    return Ae_umUo9__U_p__KG_4o_d

@query
def j_2j1_(X__g57_: l6, o7_6KifpM: gnq1_8A7z7zzyKagh_DWa_4G__) -> DxT5g1dUS_IeV_63_T_tZu04Du5H:
    return X__g57_ + o7_6KifpM

@update
def XX8y1Jq2VK4_KnZ_H(zMx_dbFNW__RH___PD_3Kj5VWLD: nat, Llx72H_lUV8_os2NM: mJLW, k4Z__: nat) -> nat:
    return zMx_dbFNW__RH___PD_3Kj5VWLD + Llx72H_lUV8_os2NM + k4Z__

@update
def j7_W1t__rXkKya8p_(lwM_6YcX5ckk7xn9C: nat, Oh8jK088v89g: YdZU) -> l6:
    return lwM_6YcX5ckk7xn9C + Oh8jK088v89g

@update
def vWr67ARxr_8Ng0u7kGrT__OrN66NeC(P_W_2_J__0Av: mJLW, dTy0W7A88ZSVVAP7g_ZE21M2145khh_99: nat) -> c2Hq_Iw8:
    return P_W_2_J__0Av + dTy0W7A88ZSVVAP7g_ZE21M2145khh_99

@update
def oPKT95(Id2__UOaC_nypUDuUX_L: nat, ahE18Fnm_T_dA_2l__aN2: YZ_Iw_Z91K_0Af_vM5xlu, r61zVEW_z43__jw49: nat, W_: nat) -> nat:
    return Id2__UOaC_nypUDuUX_L + ahE18Fnm_T_dA_2l__aN2 + r61zVEW_z43__jw49 + W_

@query
def l_vlJp5dI_F0l_q725CzHhcDJM_(v_o_0F83: c2Hq_Iw8, Z_51LQE0DA7YJ___p: nat, vi84jQ__fSIem2w70kX_bn_U: YZ_Iw_Z91K_0Af_vM5xlu, I_: nat) -> h3pNy__bqV:
    return v_o_0F83 + Z_51LQE0DA7YJ___p + vi84jQ__fSIem2w70kX_bn_U + I_

@update
def xxZ5P9JdJv_zu6joDIbl0ua2J2eE_() -> nat:
    return 238_233_978_062_176_202_231_667_302_839_580_166_894

@query
def bwfElLQN_() -> c2Hq_Iw8:
    return 138_789_823_778_996_099_318_853_999_659_090_742_446

@query
def oP1qVvyf_6AACK(xt3QH4Tv4ip: nat, aCj_TA___N07O5n4: nat) -> h3pNy__bqV:
    return xt3QH4Tv4ip + aCj_TA___N07O5n4

@query
def MQ4EShdb8_2_HCZWJLq0sR0L__KSybV1(ookw: mJLW) -> CK__C_jH:
    return ookw

@query
def zL0r__t_sd9(j5s2oNj_9f_QAh9FFb_ka2TV3j4Nq: gnq1_8A7z7zzyKagh_DWa_4G__) -> YZ_Iw_Z91K_0Af_vM5xlu:
    return j5s2oNj_9f_QAh9FFb_ka2TV3j4Nq

@update
def AAE__uw3sv2Oucz_k___AP_bTD0O9hBQ2(eSyEhOhWSuQb_T_: mJLW, MyGsFCh3R3_N_d98_VbuI041_C_: nat, Rd2c_STU_S__v4x: nat) -> nat:
    return eSyEhOhWSuQb_T_ + MyGsFCh3R3_N_d98_VbuI041_C_ + Rd2c_STU_S__v4x

@update
def YkY3O7Jt(wtwhcRl0u: adflTxPfz_YkIj1p, g8y_: y_c6Dz5_aVIY_ySs96b__I4gNaltRL8, UI9: nat, toITSE9Y3ML3xa2mOW9mfS_6N__7qr: YZ_Iw_Z91K_0Af_vM5xlu) -> h3pNy__bqV:
    return wtwhcRl0u + g8y_ + UI9 + toITSE9Y3ML3xa2mOW9mfS_6N__7qr

@query
def n___g83n_5(nv0: YZ_Iw_Z91K_0Af_vM5xlu, vNcZwI23R0rw21R9RdsJdlpn_Rq_62WsH: l6, J25euc_X72f_: nat) -> nat:
    return nv0 + vNcZwI23R0rw21R9RdsJdlpn_Rq_62WsH + J25euc_X72f_

@update
def Z70_T_wm217_85_yQkFBH2c3Jf_P6(TU6D_L_: YZ_Iw_Z91K_0Af_vM5xlu, CBaIB9MQ_C_8: YZ_Iw_Z91K_0Af_vM5xlu) -> YZ_Iw_Z91K_0Af_vM5xlu:
    return TU6D_L_ + CBaIB9MQ_C_8

@update
def W_0U_m_T9w() -> nat:
    return 257_727_259_170_771_994_084_217_470_061_683_061_381

@query
def TF411P4(l8: gnq1_8A7z7zzyKagh_DWa_4G__) -> YZ_Iw_Z91K_0Af_vM5xlu:
    return l8

@query
def t1sRw8__3VCJ(vpyRSs_WnGTY: nat) -> nat:
    return vpyRSs_WnGTY

@update
def ZzKzXm496_lj(zoxnz7i_d3od9_Zxwe_0U__vBz5K: nat, hfK1Hn__57_i0IuQ0M_c: nat, J____Y: h3pNy__bqV, J9__I93i_0l61_IVl9j_iCaP_: c2Hq_Iw8) -> nat:
    return zoxnz7i_d3od9_Zxwe_0U__vBz5K + hfK1Hn__57_i0IuQ0M_c + J____Y + J9__I93i_0l61_IVl9j_iCaP_

@query
def B45___B9ms_6kV65(nL_k_z_iJ__qEI_2_VLjg1a_3u_S_5___: l6, V7_G9P2_x40Q097B5Gb_sqEt__HOa_: nat) -> adflTxPfz_YkIj1p:
    return nL_k_z_iJ__qEI_2_VLjg1a_3u_S_5___ + V7_G9P2_x40Q097B5Gb_sqEt__HOa_

@query
def B3J_S2cqsPnMZnmuIFtvhVB5(V_jRtT280_8____t6m_U5NNWF9_: CK__C_jH, Ndiv2e8y_z0YXPkjQzF_foTWJZA: nat, F_n: mJLW) -> nat:
    return V_jRtT280_8____t6m_U5NNWF9_ + Ndiv2e8y_z0YXPkjQzF_foTWJZA + F_n

@query
def JKrLloNHUMi_n60_sN5a_BJJFxGW(PP3cHn_g2U: gnq1_8A7z7zzyKagh_DWa_4G__, gz1Ze_5SSz9iML_xIZJ_Zs_C__: DxT5g1dUS_IeV_63_T_tZu04Du5H, R9jj1H5_dZesc55U_p: y_c6Dz5_aVIY_ySs96b__I4gNaltRL8) -> l6:
    return PP3cHn_g2U + gz1Ze_5SSz9iML_xIZJ_Zs_C__ + R9jj1H5_dZesc55U_p

@update
def r2eG_() -> adflTxPfz_YkIj1p:
    return 167_013_266_852_141_952_675_048_969_701_885_699_483

@update
def RXSYsB4Jo() -> nat:
    return 131_987_477_422_664_560_533_241_306_183_620_892_214

@update
def AsBPMUOKAG_upH_gf1is(j_7_WSA3C: l6, bi5qlhc__bL7VfDm_CNsigi9CAbaObneq: nat, c1Oe6__Ms3YlJuFMr9s_AxJoPRXmDK_: nat) -> YdZU:
    return j_7_WSA3C + bi5qlhc__bL7VfDm_CNsigi9CAbaObneq + c1Oe6__Ms3YlJuFMr9s_AxJoPRXmDK_

@update
def zu3TJ7(n_bk_jSs9_: DxT5g1dUS_IeV_63_T_tZu04Du5H) -> DxT5g1dUS_IeV_63_T_tZu04Du5H:
    return n_bk_jSs9_

@update
def HGMts8_wPm4__3UJwwx() -> c2Hq_Iw8:
    return 256_898_537_298_849_071_879_553_152_521_175_968_851

@update
def D1qib1deu40E() -> nat:
    return 141_062_341_105_954_502_477_120_912_467_412_909_791

@query
def ZyjVj_TkH_e(T7Bz__bdL_j: YZ_Iw_Z91K_0Af_vM5xlu) -> nat:
    return T7Bz__bdL_j

@query
def JO__L0HG_D89sDy_5fA83ae___9_DZ(Kbfevz__MHn2iekdTT: adflTxPfz_YkIj1p, PE2_Q: nat, sDyB2gMcw3P_laJOO2_: nat) -> y_c6Dz5_aVIY_ySs96b__I4gNaltRL8:
    return Kbfevz__MHn2iekdTT + PE2_Q + sDyB2gMcw3P_laJOO2_

@update
def Cm_PJ0_S__W_o6i_p7(O6sk_MjpLI3_: DxT5g1dUS_IeV_63_T_tZu04Du5H) -> gnq1_8A7z7zzyKagh_DWa_4G__:
    return O6sk_MjpLI3_

@update
def dQN0A_Xaw__FHAei72WVMIFW_EU7eExj(PB: nat, NaO_b5A5TQXP_P7s5cBJ6pq1I8AI_: YZ_Iw_Z91K_0Af_vM5xlu, G4rcoO7_wH4SJ: CK__C_jH, L5H3_a: y_c6Dz5_aVIY_ySs96b__I4gNaltRL8) -> YZ_Iw_Z91K_0Af_vM5xlu:
    return PB + NaO_b5A5TQXP_P7s5cBJ6pq1I8AI_ + G4rcoO7_wH4SJ + L5H3_a

@update
def c__6__(G_6q___L4sJZ: gnq1_8A7z7zzyKagh_DWa_4G__, G_Sxv_1x3LBtd_pSa: adflTxPfz_YkIj1p, Ipt_2i_dYFt_LE5jR_z3__fqfW0J: l6) -> nat:
    return G_6q___L4sJZ + G_Sxv_1x3LBtd_pSa + Ipt_2i_dYFt_LE5jR_z3__fqfW0J
lastmjs commented 1 year ago

Python static analysis does not say that this is an error, but apparently returning 0 does not allow our conversion to an f64 from RustPython. This could be a RustPython bug, but I am not sure.

Error: Failed update call.
Caused by: Failed update call.
  The Replica returned an error: code 5, message: "Canister rrkah-fqaaa-aaaaa-aaaaq-cai trapped explicitly: Panicked at 'called `Result::unwrap()` on an `Err` value: CdkActTryFromVmValueError("Could not convert PyObjectRef to f64")', kybra_tests_candid_types_float64/src/lib.rs:3744:65"
@update
def Fd_jS2__7PSPVbS31Py2bU() -> float64:
    return 0
lastmjs commented 1 year ago

I am thinking this might be a bug in RustPython. -0 + -0 is 0 in Python, but -0.0 + -0.0 is -0. It seems like RustPython isn't doing this correctly, adding to f64 or f32 -0s together.

assertion failed: result.to_ne_bytes() == expected.to_ne_bytes()
function: Z_y0NqUzS

result: -0
arb_function.value: 0

Also

args_candid_string: -0.0: float32,-0.0: float32
function: Y5Vf_OM_389HGx0Xjo3w__w7YP4_Z_

result: -0
arb_function.value: 0
@query
def Z_y0NqUzS(A_JroqN6vxZ_h__79KnO: O_HwtO) -> aSQ_aL0PPMg9N:
    return A_JroqN6vxZ_h__79KnO
lastmjs commented 1 year ago

Python functions that are Rust keywords must be dealt with appropriately.