all tests can pass, not controlled for random, need to improve tests
added a README