Adding 'L' produces the same result. I actually discovered this issue a while back and even wrote some unit tests for it (see link in my previous email). It's embarrassing that I didn't recognize it immediately.
I wish I had the time and ability to submit a fix. -- Sean On 9/10/15 1:26 PM, corneil.duples...@gmail.com wrote: > Try adding L to your long constants. > I ran into a similar problem the other days where my calculation of > date difference in milliseconds produced an overflow and a negative > number. > > assert 100000000000000016L == (({ BigDecimal it -> > it})(100000000000000010L)) > > > -- > Corneil du Plessis > https://about.me/corneil > > <https://about.me/corneil?promo=email_sig> > > > On 10 September 2015 at 22:15, Sean Gilligan <s...@msgilligan.com > <mailto:s...@msgilligan.com>> wrote: > > A one line assert which PASSES and shouldn't: > > assert 100000000000000016 == (({ BigDecimal it -> > it})(100000000000000010)) > > > More detail (all asserts pass): > > def val = 100000000000000010 > assert val.class == Long > def closure = { BigDecimal it -> it} > def bdVal = closure(val) > assert bdVal.class == BigDecimal > assert bdVal == 100000000000000016 > def bdCastVal = (BigDecimal) val > assert bdCastVal.class == BigDecimal > assert bdCastVal == 100000000000000010 > > So, converting to BigDecimal with a cast or with an `as` seems to > work. > But having Groovy do it automatically for a function or closure > parameter fails. > > Am I missing something? Is this a known issue? > > Thanks, > > Sean > > >