new Rational data type implementation with tests