add test cases; unfinished