new tests for new data types, using State monad now as it is very natual