tested under pypy