test pass. todo: border cases