micropython/tests/basics
Nicko van Someren 3aab54bf43 py: Support non-boolean results for equality and inequality tests.
This commit implements a more complete replication of CPython's behaviour
for equality and inequality testing of objects.  This addresses the issues
discussed in #5382 and a few other inconsistencies.  Improvements over the
old code include:

- Support for returning non-boolean results from comparisons (as used by
  numpy and others).
- Support for non-reflexive equality tests.
- Preferential use of __ne__ methods and MP_BINARY_OP_NOT_EQUAL binary
  operators for inequality tests, when available.
- Fallback to op2 == op1 or op2 != op1 when op1 does not implement the
  (in)equality operators.

The scheme here makes use of a new flag, MP_TYPE_FLAG_NEEDS_FULL_EQ_TEST,
in the flags word of mp_obj_type_t to indicate if various shortcuts can or
cannot be used when performing equality and inequality tests.  Currently
four built-in classes have the flag set: float and complex are
non-reflexive (since nan != nan) while bytearray and frozenszet instances
can equal other builtin class instances (bytes and set respectively).  The
flag is also set for any new class defined by the user.

This commit also includes a more comprehensive set of tests for the
behaviour of (in)equality operators implemented in special methods.
2020-01-30 14:53:07 +11:00
..
0prelim.py
andor.py
array1.py tests: Rename "array" module to "uarray". 2019-10-22 19:16:54 +11:00
array_add.py tests: Rename "array" module to "uarray". 2019-10-22 19:16:54 +11:00
array_construct.py tests: Rename "array" module to "uarray". 2019-10-22 19:16:54 +11:00
array_construct2.py tests: Rename "array" module to "uarray". 2019-10-22 19:16:54 +11:00
array_construct_endian.py tests: Rename "array" module to "uarray". 2019-10-22 19:16:54 +11:00
array_intbig.py tests: Rename "array" module to "uarray". 2019-10-22 19:16:54 +11:00
array_micropython.py tests: Rename "array" module to "uarray". 2019-10-22 19:16:54 +11:00
array_micropython.py.exp
assign1.py
async_await.py
async_await.py.exp
async_await2.py tests/basics: Use str.format instead of % for formatting messages. 2019-10-29 22:22:37 +11:00
async_await2.py.exp
async_def.py
async_def.py.exp
async_for.py
async_for.py.exp
async_for2.py
async_for2.py.exp
async_with.py py/compile: Fix handling of unwinding BaseException in async with. 2019-02-26 23:52:10 +11:00
async_with.py.exp py/compile: Fix handling of unwinding BaseException in async with. 2019-02-26 23:52:10 +11:00
async_with2.py
async_with2.py.exp
async_with_break.py
async_with_break.py.exp
async_with_return.py
async_with_return.py.exp
attrtuple1.py
bool1.py
boundmeth1.py
break.py
builtin_abs.py
builtin_abs_intbig.py
builtin_allany.py
builtin_bin.py
builtin_bin_intbig.py
builtin_callable.py
builtin_chr.py
builtin_compile.py
builtin_delattr.py
builtin_dir.py tests/basics/builtin_dir.py: Look for "version" in dir(sys). 2019-10-29 22:22:37 +11:00
builtin_divmod.py
builtin_divmod_intbig.py
builtin_ellipsis.py py/objsingleton: Use mp_generic_unary_op for singleton objects. 2019-12-27 12:53:36 +11:00
builtin_enumerate.py
builtin_eval.py
builtin_eval_error.py
builtin_exec.py
builtin_filter.py
builtin_getattr.py
builtin_hasattr.py
builtin_hash.py
builtin_hash_gen.py
builtin_hash_intbig.py
builtin_help.py
builtin_help.py.exp
builtin_hex.py
builtin_hex_intbig.py
builtin_id.py
builtin_issubclass.py
builtin_len1.py
builtin_locals.py
builtin_map.py
builtin_minmax.py
builtin_next_arg2.py py: Add optional support for 2-argument version of built-in next(). 2019-01-27 13:01:28 +11:00
builtin_oct.py
builtin_oct_intbig.py
builtin_ord.py
builtin_override.py tests: Add tests for overriding builtins.__import__. 2019-07-31 22:37:44 +10:00
builtin_pow.py
builtin_pow3.py
builtin_pow3_intbig.py
builtin_print.py
builtin_property.py
builtin_property_inherit.py
builtin_range.py
builtin_range_attrs.py
builtin_range_binop.py
builtin_reversed.py
builtin_round.py
builtin_round_int.py
builtin_round_intbig.py
builtin_setattr.py
builtin_slice.py
builtin_sorted.py
builtin_sum.py
builtin_type.py
builtin_zip.py
bytearray1.py
bytearray_add.py
bytearray_append.py
bytearray_construct.py py/objarray: bytearray: Allow 2nd/3rd arg to constructor. 2018-09-11 15:10:10 +10:00
bytearray_construct_array.py tests: Rename "array" module to "uarray". 2019-10-22 19:16:54 +11:00
bytearray_construct_endian.py tests: Rename "array" module to "uarray". 2019-10-22 19:16:54 +11:00
bytearray_decode.py py/objarray: Add decode method to bytearray. 2019-05-21 14:24:04 +10:00
bytearray_intbig.py
bytearray_slice_assign.py py/objarray: Fix amount of free space in array when doing slice assign. 2019-08-15 23:02:04 +10:00
bytes.py
bytes_add.py tests/basics: Split out specific bytearray tests to separate files. 2019-10-29 22:22:37 +11:00
bytes_add_array.py tests: Rename "array" module to "uarray". 2019-10-22 19:16:54 +11:00
bytes_add_bytearray.py tests/basics: Split out specific bytearray tests to separate files. 2019-10-29 22:22:37 +11:00
bytes_add_endian.py tests: Rename "array" module to "uarray". 2019-10-22 19:16:54 +11:00
bytes_compare.py
bytes_compare2.py tests/basics: Split out specific bytearray tests to separate files. 2019-10-29 22:22:37 +11:00
bytes_compare3.py
bytes_compare3.py.exp
bytes_compare_array.py tests: Rename "array" module to "uarray". 2019-10-22 19:16:54 +11:00
bytes_compare_bytearray.py tests/basics: Split out specific bytearray tests to separate files. 2019-10-29 22:22:37 +11:00
bytes_construct.py tests/basics: Split out specific bytearray tests to separate files. 2019-10-29 22:22:37 +11:00
bytes_construct_array.py tests: Rename "array" module to "uarray". 2019-10-22 19:16:54 +11:00
bytes_construct_bytearray.py tests/basics: Split out specific bytearray tests to separate files. 2019-10-29 22:22:37 +11:00
bytes_construct_endian.py tests: Rename "array" module to "uarray". 2019-10-22 19:16:54 +11:00
bytes_construct_intbig.py
bytes_count.py tests: Make bytes/str.count() tests skippable. 2018-10-22 22:50:28 +11:00
bytes_find.py
bytes_format_modulo.py tests/basics: Automatically skip tests that use str/bytes modulo-format. 2019-10-29 22:22:37 +11:00
bytes_format_modulo.py.exp
bytes_gen.py
bytes_large.py
bytes_mult.py
bytes_partition.py
bytes_replace.py
bytes_split.py
bytes_strip.py
bytes_subscr.py
class1.py
class2.py
class3.py
class_bases.py py/objtype: Add type.__bases__ attribute. 2019-10-18 15:20:56 +11:00
class_bind_self.py
class_binop.py
class_call.py
class_contains.py
class_delattr_setattr.py py/objobject: Add object.__delattr__ function. 2019-12-21 00:14:22 +11:00
class_descriptor.py
class_emptybases.py
class_getattr.py tests/basics/class_getattr: Remove invalid test for __getattribute__. 2018-10-18 12:28:09 +11:00
class_inherit1.py
class_inherit_mul.py
class_inplace_op.py tests/basics: Use str.format instead of % for formatting messages. 2019-10-29 22:22:37 +11:00
class_instance_override.py
class_item.py
class_misc.py tests/basics: Use bytes not bytearray when checking user buffer proto. 2019-10-29 22:22:37 +11:00
class_new.py
class_notimpl.py py/objsingleton: Use mp_generic_unary_op for singleton objects. 2019-12-27 12:53:36 +11:00
class_number.py
class_reverse_op.py tests/basics: Use str.format instead of % for formatting messages. 2019-10-29 22:22:37 +11:00
class_staticclassmethod.py py/objtype: Support full object model for get/set/delitem special meths. 2018-09-28 23:22:34 +10:00
class_store.py
class_store_class.py
class_str.py
class_super.py
class_super_aslocal.py
class_super_closure.py
class_super_multinherit.py
class_super_object.py
class_use_other.py
closure1.py
closure2.py
closure_defargs.py
closure_manyvars.py
closure_namedarg.py
compare_multi.py
comprehension1.py
containment.py
continue.py
decorator.py
del_attr.py
del_deref.py
del_global.py
del_local.py
del_name.py
del_subscr.py
deque1.py
deque2.py
deque2.py.exp
dict1.py tests: Modify tests that print repr of an exception with 1 arg. 2018-08-17 15:46:04 +10:00
dict2.py
dict_clear.py
dict_construct.py
dict_copy.py
dict_del.py
dict_fixed.py
dict_fixed.py.exp
dict_from_iter.py
dict_fromkeys.py
dict_fromkeys2.py
dict_get.py
dict_intern.py
dict_iterator.py
dict_pop.py
dict_popitem.py
dict_setdefault.py
dict_specialmeth.py
dict_update.py
dict_views.py
equal.py
equal_class.py
errno1.py
errno1.py.exp
except_match_tuple.py
exception1.py tests: Modify tests that print repr of an exception with 1 arg. 2018-08-17 15:46:04 +10:00
exception_chain.py
exception_chain.py.exp
exceptpoly.py
exceptpoly2.py
floordivide.py
floordivide_intbig.py
for1.py
for2.py
for3.py
for_break.py
for_else.py
for_range.py
for_return.py
frozenset1.py
frozenset_add.py
frozenset_binop.py
frozenset_copy.py
frozenset_difference.py
frozenset_set.py
fun1.py
fun2.py
fun3.py
fun_annotations.py
fun_calldblstar.py
fun_calldblstar2.py
fun_calldblstar3.py
fun_callstar.py
fun_callstardblstar.py
fun_defargs.py
fun_defargs2.py
fun_error.py
fun_error2.py
fun_kwargs.py
fun_kwonly.py
fun_kwonlydef.py
fun_kwvarargs.py
fun_largestate.py
fun_name.py tests/basics: Add test for getting name of func with closed over locals. 2019-10-01 12:26:22 +10:00
fun_str.py
fun_varargs.py
gc1.py
gen_yield_from.py py/objgenerator: Implement PEP479, StopIteration convs to RuntimeError. 2018-09-20 15:36:59 +10:00
gen_yield_from_close.py py/objgenerator: Implement PEP479, StopIteration convs to RuntimeError. 2018-09-20 15:36:59 +10:00
gen_yield_from_ducktype.py
gen_yield_from_exc.py
gen_yield_from_executing.py
gen_yield_from_iter.py
gen_yield_from_pending.py tests: Add tests for generator throw and yield-from with exc handlers. 2020-01-27 13:16:06 +11:00
gen_yield_from_send.py
gen_yield_from_stopped.py
gen_yield_from_throw.py tests/basics: Add test for throw into yield-from with normal return. 2019-10-04 23:27:48 +10:00
gen_yield_from_throw2.py py/vm: Fix case of throwing GeneratorExit type into yield-from. 2018-09-28 11:39:35 +10:00
gen_yield_from_throw3.py
generator1.py
generator2.py
generator_args.py
generator_close.py py/objgenerator: Implement PEP479, StopIteration convs to RuntimeError. 2018-09-20 15:36:59 +10:00
generator_closure.py
generator_exc.py
generator_name.py
generator_pend_throw.py py/objgenerator: Allow pend_throw to an unstarted generator. 2019-11-04 15:51:16 +11:00
generator_pend_throw.py.exp py/objgenerator: Allow pend_throw to an unstarted generator. 2019-11-04 15:51:16 +11:00
generator_pep479.py py/runtime: Fix PEP479 behaviour throwing StopIteration into yield from. 2019-10-04 23:27:00 +10:00
generator_pep479.py.exp py/runtime: Fix PEP479 behaviour throwing StopIteration into yield from. 2019-10-04 23:27:00 +10:00
generator_return.py py/objgenerator: Remove TODO about returning gen being called again. 2018-09-27 15:18:24 +10:00
generator_send.py
generator_throw.py py/objgenerator: Fix handling of None passed as 2nd arg to throw(). 2019-05-09 13:40:28 +10:00
generator_throw_nested.py tests: Add tests for generator throw and yield-from with exc handlers. 2020-01-27 13:16:06 +11:00
getattr.py py/objtype: Remove comment about catching exc from user __getattr__. 2018-10-18 12:15:16 +11:00
getitem.py
globals_del.py
ifcond.py
ifexpr.py
int1.py
int2.py
int_big1.py
int_big_add.py
int_big_and.py
int_big_and2.py
int_big_and3.py
int_big_cmp.py
int_big_div.py
int_big_error.py tests/basics/int_big_error.py: Use bytearray to test for int overflow. 2018-08-17 15:43:47 +10:00
int_big_lshift.py
int_big_mod.py
int_big_mul.py
int_big_or.py
int_big_or2.py
int_big_or3.py
int_big_pow.py
int_big_rshift.py
int_big_unary.py
int_big_xor.py
int_big_xor2.py
int_big_xor3.py
int_big_zeroone.py
int_bytes.py
int_bytes_intbig.py
int_constfolding.py
int_constfolding_intbig.py
int_divmod.py
int_divmod_intbig.py
int_divzero.py
int_intbig.py
int_small.py
io_buffered_writer.py
io_buffered_writer.py.exp
io_bytesio_cow.py
io_bytesio_ext.py
io_bytesio_ext2.py
io_bytesio_ext2.py.exp
io_iobase.py
io_stringio1.py
io_stringio_with.py
io_write_ext.py
io_write_ext.py.exp
is_isnot.py
iter0.py
iter1.py
iter2.py
iter_of_iter.py
lambda1.py
lambda_defargs.py
lexer.py
list1.py tests/basics: Split out specific slice tests to separate files. 2019-10-29 22:22:37 +11:00
list_clear.py
list_compare.py
list_copy.py
list_count.py
list_extend.py
list_index.py
list_insert.py
list_mult.py
list_pop.py
list_remove.py
list_reverse.py
list_slice.py tests/basics: Split out specific slice tests to separate files. 2019-10-29 22:22:37 +11:00
list_slice_3arg.py
list_slice_assign.py
list_slice_assign_grow.py
list_sort.py
list_sum.py
logic_constfolding.py
memoryerror.py
memoryerror.py.exp
memoryview1.py tests: Rename "array" module to "uarray". 2019-10-22 19:16:54 +11:00
memoryview2.py tests: Rename "array" module to "uarray". 2019-10-22 19:16:54 +11:00
memoryview_gc.py
memoryview_intbig.py tests: Rename "array" module to "uarray". 2019-10-22 19:16:54 +11:00
memoryview_itemsize.py tests/basics/memoryview_itemsize: Make portable to 32- and 64-bit archs. 2019-12-13 15:59:08 +11:00
module1.py
module2.py
module2.py.exp
namedtuple1.py
namedtuple_asdict.py
object1.py
object_dict.py
object_new.py
op_error.py tests/basics: Split out specific bytearray tests to separate files. 2019-10-29 22:22:37 +11:00
op_error_bytearray.py tests/basics: Split out specific bytearray tests to separate files. 2019-10-29 22:22:37 +11:00
op_error_intbig.py
op_error_memoryview.py
op_precedence.py
ordereddict1.py
ordereddict_eq.py
ordereddict_eq.py.exp
parser.py
parser.py.exp tests: Add .exp files for basics/parser and import/import_override. 2019-12-13 14:20:47 +11:00
python34.py tests: Modify tests that print repr of an exception with 1 arg. 2018-08-17 15:46:04 +10:00
python34.py.exp tests: Modify tests that print repr of an exception with 1 arg. 2018-08-17 15:46:04 +10:00
python36.py
python36.py.exp
return1.py
scope.py
scope_implicit.py py/compile: Fix case of eager implicit conversion of local to nonlocal. 2018-10-28 00:33:08 +11:00
self_type_check.py
seq_unpack.py
set_add.py
set_basic.py
set_binop.py
set_clear.py
set_comprehension.py
set_containment.py
set_copy.py
set_difference.py
set_discard.py
set_intersection.py
set_isdisjoint.py
set_isfooset.py
set_iter.py
set_iter_of_iter.py
set_pop.py tests/basics/set_pop.py: Sort set before printing for consistent output. 2018-08-17 15:42:51 +10:00
set_remove.py
set_specialmeth.py
set_symmetric_difference.py
set_type.py
set_union.py
set_unop.py
set_update.py
slice_attrs.py
slice_indices.py py/objslice: Add support for indices() method on slice objects. 2019-12-28 23:55:15 +11:00
slice_intbig.py
slots_bool_len.py
special_comparisons.py py: Support non-boolean results for equality and inequality tests. 2020-01-30 14:53:07 +11:00
special_comparisons2.py py: Support non-boolean results for equality and inequality tests. 2020-01-30 14:53:07 +11:00
special_methods.py tests/basics/special_methods: Add testcases for __int__. 2018-12-07 17:28:04 +11:00
special_methods2.py tests/basics: Add test for matmul operator. 2019-09-26 15:15:34 +10:00
special_methods2.py.exp tests/basics: Add test for matmul operator. 2019-09-26 15:15:34 +10:00
string1.py
string_center.py
string_compare.py
string_count.py tests: Make bytes/str.count() tests skippable. 2018-10-22 22:50:28 +11:00
string_cr_conversion.py
string_crlf_conversion.py
string_endswith.py
string_endswith_upy.py
string_endswith_upy.py.exp
string_escape.py
string_find.py
string_format.py tests: Add boolean-as-integer formatting tests for fixed regression. 2020-01-24 10:57:17 +11:00
string_format2.py
string_format_error.py
string_format_modulo.py tests: Add boolean-as-integer formatting tests for fixed regression. 2020-01-24 10:57:17 +11:00
string_format_modulo_int.py tests/basics: Automatically skip tests that use str/bytes modulo-format. 2019-10-29 22:22:37 +11:00
string_index.py
string_istest.py
string_join.py
string_large.py
string_mult.py
string_partition.py
string_replace.py
string_repr.py tests/basics: Use str.format instead of % for formatting messages. 2019-10-29 22:22:37 +11:00
string_rfind.py
string_rindex.py
string_rpartition.py
string_rsplit.py
string_slice.py
string_split.py
string_splitlines.py
string_startswith.py
string_startswith_upy.py
string_startswith_upy.py.exp
string_strip.py
string_upperlow.py
struct1.py
struct1_intbig.py
struct2.py
struct_endian.py py/modstruct: Fix struct.pack_into with unaligned offset of native type. 2019-09-02 13:14:16 +10:00
struct_micropython.py
struct_micropython.py.exp
subclass_classmethod.py
subclass_native1.py
subclass_native2_list.py
subclass_native2_tuple.py
subclass_native3.py tests: Modify tests that print repr of an exception with 1 arg. 2018-08-17 15:46:04 +10:00
subclass_native4.py
subclass_native5.py
subclass_native_buffer.py tests/basics: Use bytes not bytearray when checking user buffer proto. 2019-10-29 22:22:37 +11:00
subclass_native_call.py tests: Skip tests needing machine module if (u)machine doesn't exist. 2019-04-28 22:12:17 +10:00
subclass_native_call.py.exp
subclass_native_cmp.py
subclass_native_containment.py
subclass_native_init.py
subclass_native_iter.py
subclass_native_specmeth.py
syntaxerror.py
sys1.py py/modsys: Report .mpy version in sys.implementation. 2019-11-04 16:00:41 +11:00
sys_exit.py tests/basics: Split sys.exit test to separate file so it can be skipped. 2019-10-29 22:22:37 +11:00
sys_getsizeof.py
true_value.py
try1.py
try2.py
try3.py
try4.py
try_as_var.py tests: Modify tests that print repr of an exception with 1 arg. 2018-08-17 15:46:04 +10:00
try_continue.py
try_else.py tests/basics: Add tests for try-except-else and try-except-else-finally. 2019-02-21 16:22:41 +11:00
try_else_finally.py tests/basics: Add tests for try-except-else and try-except-else-finally. 2019-02-21 16:22:41 +11:00
try_error.py
try_except_break.py py/bc: Fix size calculation of UNWIND_JUMP opcode in mp_opcode_format. 2019-09-02 13:30:16 +10:00
try_except_break.py.exp py/bc: Fix size calculation of UNWIND_JUMP opcode in mp_opcode_format. 2019-09-02 13:30:16 +10:00
try_finally1.py py/emitnative: Fix try-finally in outer scope, so finally is cancelled. 2018-09-11 15:33:25 +10:00
try_finally2.py
try_finally_break.py py: Fix VM crash with unwinding jump out of a finally block. 2019-03-05 16:05:05 +11:00
try_finally_break2.py py/vm: Fix handling of unwind jump out of active finally. 2019-10-04 23:01:29 +10:00
try_finally_continue.py py/vm: Fix handling of unwind jump out of active finally. 2019-10-04 23:01:29 +10:00
try_finally_continue.py.exp py/vm: Fix handling of unwind jump out of active finally. 2019-10-04 23:01:29 +10:00
try_finally_loops.py
try_finally_return.py
try_finally_return2.py
try_finally_return3.py py/vm: Fix handling of finally-return with complex nested finallys. 2018-09-03 13:08:16 +10:00
try_finally_return4.py tests/basics: Add more tests for return within try-finally. 2018-09-04 14:37:07 +10:00
try_finally_return5.py py/vm: Fix handling of unwind jump out of active finally. 2019-10-04 23:01:29 +10:00
try_reraise.py
try_reraise2.py
try_return.py py: Fix VM crash with unwinding jump out of a finally block. 2019-03-05 16:05:05 +11:00
tuple1.py tests/basics: Split out specific slice tests to separate files. 2019-10-29 22:22:37 +11:00
tuple_compare.py
tuple_count.py
tuple_index.py
tuple_mult.py
tuple_slice.py tests/basics: Split out specific slice tests to separate files. 2019-10-29 22:22:37 +11:00
types1.py
types2.py
unary_op.py
unboundlocal.py
unpack1.py
while1.py
while_cond.py
while_nest_exc.py
with1.py
with_break.py
with_continue.py
with_raise.py tests/basics: Add test cases for context manager raising in enter/exit. 2018-09-04 14:37:30 +10:00
with_return.py