passes many tests, still not done
test program