necessary forward declare + more test cases