add more tests and performance benchmarks