Hi Chris,

Thanks for looking at this.

There is some rudimentary testing using streams in 
CollectAndSummaryStatisticsTest.java.

I think we should enforce constraints where we reliably can:

1) count >= 0

2) count = 0, then min/max/sum are ignored and it’s as if the default 
constructor was called. (I thought it might be appropriate to reject since a 
caller might be passing in incorrect information in error, but the defaults for 
min/max are important and would be a burden for the caller to pass those 
values.) In this respect having count as the first parameter of the constructor 
would be useful.

3)  min <= max

Since for count > 0 the constraints, count * max >= sum, count * min <= sum, 
cannot be reliably enforced due to overflow i am inclined to not bother and 
just document.


Note this is gonna be blocked from pushing until the new Compatibility and 
Specification Review (CSR) process is opened up, which i understand is 
“soon"ish :-) but that should not block adding some further tests in the 
interim and tidying up the javadoc.

Paul.


> On 6 Apr 2017, at 07:08, Chris Dennis <chris.w.den...@gmail.com> wrote:
> 
> Hi Paul (et al)
> 
> Like all things API there are wrinkles here when it comes to implementing.
> 
> This patch isn’t final, there appears to be no existing test coverage for 
> these classes beyond testing the compensating summation used in the double 
> implementation, and I left off adding any until it was decided how much 
> parameter validation we want (since that’s the only testing that can really 
> occur here).
> 
> The wrinkles relate to the issues around instances that have suffered 
> overflow in count and/or sum which the existing implementation doesn’t defend 
> against:
> 
> * I chose to ignore all parameters if 'count == 0’ and just leave the 
> instance empty. I held off from validating min, max and count however. This 
> obviously 'breaks things’ (beyond how broken they would already be) if count 
> == 0 only due to overflow.
> * I chose to fail if count is negative.
> * I chose to enforce that max and min are logically consistent with count and 
> sum, this can break the moment either one of the overflows as well (I’m also 
> pretty sure that the FPU logic is going to suffer here too - there might be 
> some magic I can do with a pessimistic bit of rounding on the FPU 
> multiplication result).
> 
> I intentionally went with the most aggressive parameter validation here to 
> establish one end of what could be implemented.  There are arguments for this 
> and also arguments for the other extreme (no validation at all).  Personally 
> I’m in favor of the current version where the creation will fail if the 
> inputs are only possible through overflow (modulo fixing the FPU precision 
> issues above) even though it’s at odds with approach of the existing 
> implementation.
> 
> Would appreciate thoughts/feedback.  Thanks.
> 
> Chris
> 
> 
> P.S. I presume tests would be required for the parameter checking (once it is 
> finalized)?
> 
> <8178117.patch>

Reply via email to