I'm trying to use Junit to test a java program, and I'm not sure how to go about testing for upper-bound violations.
Specifically, I have written a simple program to convert between kilometers and miles.
For example, here is the method for converting from miles to kilometers
public static double mileToKm(double mile){
//1.1170347260596139E308 / 0.621371192 = Double.MAX_VALUE
try{
if (mile < 0 || mile > 1.1170347260596139E308){
throw new IllegalArgumentException();
}
else
return mile / 0.621371192;}
return 0;
}
So, I guess my question is two-fold: First, why is it that I can't conjure up an exception when I try
mileToKm(1.1170347260596139E308 + 1)
in junit? I assume it's a rounding issue, but if that's the case then how can I get the exception thrown?
Second, for the method to convert from km to mile, I want to throw an exception if the parameter is greater than Double.MAX_VALUE. How can I pass such a parameter? I can get the Junit test to pass if I just pass as parameter Double.MAX_VALUE * 10, but I also get a message in the Console (this is all in Eclipse Mars 4.5.1, btw) saying 'MAX = 1.7976931348623157E308'. The parameter has to be a double so it can't be BigDecimal or something like that.
OK, I lied, the question is three-fold. What's up with this:
double value = Double.MAX_VALUE * 0.621371192; //max_value * conversion factor
System.out.println(value);
prints 1.1170347260596138E308, but then these two statements
System.out.println(value / 0.621371192);
System.out.println(Double.MAX_VALUE);
print 1.7976931348623155E308 and 1.7976931348623157E308, respectively. In other words, I would expect these two values to both be equivalent to Double.MAX_VALUE, but the first statement has a 5 right before the E, instead of a 7. How can I fix this? Thanks so much, hope this isn't too prolix.