add support for property based testing
separate out (more) the concern of serialization