wrote a few tests, will finish later