Skip to content

Commit 3131053

Browse files
mpalomerpfalcon
authored andcommitted
py/objdict: Implemented OrderedDict equality check.
1 parent 91031b6 commit 3131053

1 file changed

Lines changed: 10 additions & 2 deletions

File tree

py/objdict.c

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -119,8 +119,16 @@ STATIC mp_obj_t dict_binary_op(mp_uint_t op, mp_obj_t lhs_in, mp_obj_t rhs_in) {
119119
case MP_BINARY_OP_EQUAL: {
120120
#if MICROPY_PY_COLLECTIONS_ORDEREDDICT
121121
if (MP_UNLIKELY(MP_OBJ_IS_TYPE(lhs_in, &mp_type_ordereddict) && MP_OBJ_IS_TYPE(rhs_in, &mp_type_ordereddict))) {
122-
//TODO: implement
123-
return MP_OBJ_NULL;
122+
// Iterate through both dictionaries simultaneously and compare keys and values.
123+
mp_obj_dict_t *rhs = MP_OBJ_TO_PTR(rhs_in);
124+
mp_uint_t c1 = 0, c2 = 0;
125+
mp_map_elem_t *e1 = dict_iter_next(o, &c1), *e2 = dict_iter_next(rhs, &c2);
126+
for (; e1 != NULL && e2 != NULL; e1 = dict_iter_next(o, &c1), e2 = dict_iter_next(rhs, &c2)) {
127+
if (!mp_obj_equal(e1->key, e2->key) || !mp_obj_equal(e1->value, e2->value)) {
128+
return mp_const_false;
129+
}
130+
}
131+
return e1 == NULL && e2 == NULL ? mp_const_true : mp_const_false;
124132
} else
125133
#endif
126134
if (MP_OBJ_IS_TYPE(rhs_in, &mp_type_dict)) {

0 commit comments

Comments
 (0)