Skip to content

Commit 996899b

Browse files
committed
Add tests
1 parent 6a3cd5c commit 996899b

File tree

1 file changed

+31
-0
lines changed

1 file changed

+31
-0
lines changed

Python/optimizer_symbols.c

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -890,6 +890,7 @@ _Py_uop_symbols_test(PyObject *Py_UNUSED(self), PyObject *Py_UNUSED(ignored))
890890
_Py_uop_abstractcontext_init(ctx);
891891
PyObject *val_42 = NULL;
892892
PyObject *val_43 = NULL;
893+
PyObject *val_big = NULL;
893894
PyObject *tuple = NULL;
894895

895896
// Use a single 'sym' variable so copy-pasting tests is easier.
@@ -1020,16 +1021,46 @@ _Py_uop_symbols_test(PyObject *Py_UNUSED(self), PyObject *Py_UNUSED(ignored))
10201021
TEST_PREDICATE(_Py_uop_sym_get_const(ctx, ref) == Py_False, "truthiness is not False");
10211022
TEST_PREDICATE(_Py_uop_sym_is_const(ctx, value) == true, "value is not constant");
10221023
TEST_PREDICATE(_Py_uop_sym_get_const(ctx, value) == Py_True, "value is not True");
1024+
1025+
1026+
val_big = PyNumber_Lshift(_PyLong_GetOne(), PyLong_FromLong(66));
1027+
if (val_big == NULL) {
1028+
goto fail;
1029+
}
1030+
1031+
JitOptRef ref_42 = _Py_uop_sym_new_const(ctx, val_42);
1032+
JitOptRef ref_big = _Py_uop_sym_new_const(ctx, val_big);
1033+
JitOptRef ref_int = _Py_uop_sym_new_compact_int(ctx);
1034+
TEST_PREDICATE(_Py_uop_sym_is_compact_int(ref_42), "42 is not a compact int");
1035+
TEST_PREDICATE(!_Py_uop_sym_is_compact_int(ref_big), "(1 << 66) is a compact int");
1036+
TEST_PREDICATE(_Py_uop_sym_is_compact_int(ref_int), "compact int is not a compact int");
1037+
TEST_PREDICATE(_Py_uop_sym_matches_type(ref_int, &PyLong_Type), "compact int is not an int");
1038+
1039+
_Py_uop_sym_set_type(ctx, ref_int, &PyLong_Type); // Should have no effect
1040+
TEST_PREDICATE(_Py_uop_sym_is_compact_int(ref_int), "compact int is not a compact int after cast");
1041+
TEST_PREDICATE(_Py_uop_sym_matches_type(ref_int, &PyLong_Type), "compact int is not an int after cast");
1042+
1043+
_Py_uop_sym_set_type(ctx, ref_int, &PyFloat_Type); // Should make it bottom
1044+
TEST_PREDICATE(_Py_uop_sym_is_bottom(ref_int), "compact int cast to float isn't bottom");
1045+
1046+
ref_int = _Py_uop_sym_new_compact_int(ctx);
1047+
_Py_uop_sym_set_const(ctx, ref_int, val_43);
1048+
TEST_PREDICATE(_Py_uop_sym_is_compact_int(ref_int), "43 is not a compact int");
1049+
TEST_PREDICATE(_Py_uop_sym_matches_type(ref_int, &PyLong_Type), "43 is not an int");
1050+
TEST_PREDICATE(_Py_uop_sym_get_const(ctx, ref_int) == val_43, "43 isn't 43");
1051+
10231052
_Py_uop_abstractcontext_fini(ctx);
10241053
Py_DECREF(val_42);
10251054
Py_DECREF(val_43);
1055+
Py_DECREF(val_big);
10261056
Py_DECREF(tuple);
10271057
Py_RETURN_NONE;
10281058

10291059
fail:
10301060
_Py_uop_abstractcontext_fini(ctx);
10311061
Py_XDECREF(val_42);
10321062
Py_XDECREF(val_43);
1063+
Py_XDECREF(val_big);
10331064
Py_DECREF(tuple);
10341065
return NULL;
10351066
}

0 commit comments

Comments
 (0)