add test. @tailrec