Whereas self[]
requires the index to exists, the modulo
accessor automatically
wraps overbound and underbouds indexes.
var a = [10,20,30]
assert a.modulo(1) == 20
assert a.modulo(3) == 10
assert a.modulo(-1) == 30
assert a.modulo(-10) == 30
REQUIRE not_empty
ENSURE result == self[modulo_index(index)]
# Return the index-th element but wrap
#
# Whereas `self[]` requires the index to exists, the `modulo` accessor automatically
# wraps overbound and underbouds indexes.
#
# ~~~
# var a = [10,20,30]
# assert a.modulo(1) == 20
# assert a.modulo(3) == 10
# assert a.modulo(-1) == 30
# assert a.modulo(-10) == 30
# ~~~
#
# REQUIRE `not_empty`
# ENSURE `result == self[modulo_index(index)]`
fun modulo(index: Int): E do return self[modulo_index(index)]
lib/core/collection/abstract_collection.nit:864,2--879,62