Thread overview
WTF does "Enforcement failed" actually mean?
Oct 01, 2015
Russel Winder
Oct 01, 2015
Ali Çehreli
Oct 01, 2015
Russel Winder
Oct 01, 2015
John Colvin
Oct 01, 2015
Marco Leise
Oct 01, 2015
Russel Winder
October 01, 2015
I have the code:

	reduce!"a+b"(x)

where x is a int[] and I get an exception "Enforcement failed" at run time. This gives me enough information to say ¿que?

-- 
Russel. ============================================================================= Dr Russel Winder      t: +44 20 7585 2200   voip: sip:russel.winder@ekiga.net 41 Buckmaster Road    m: +44 7770 465 077   xmpp: russel@winder.org.uk London SW11 1EN, UK   w: www.russel.org.uk  skype: russel_winder



October 01, 2015
On 09/30/2015 10:46 PM, Russel Winder via Digitalmars-d-learn wrote:
> I have the code:
>
> 	reduce!"a+b"(x)
>
> where x is a int[] and I get an exception "Enforcement failed" at run
> time. This gives me enough information to say ¿que?
>

It's coming from the following no-message enforce():

            enforce(!r.empty);


https://github.com/D-Programming-Language/phobos/blob/master/std/algorithm/iteration.d#L2481

You are using the no-seed version of reduce(), which uses the first element as seed, which means that the range cannot be empty.

Ali

October 01, 2015
On Wed, 2015-09-30 at 23:35 -0700, Ali Çehreli via Digitalmars-d-learn wrote:
> On 09/30/2015 10:46 PM, Russel Winder via Digitalmars-d-learn wrote:
> > I have the code:
> > 
> > 	reduce!"a+b"(x)
> > 
> > where x is a int[] and I get an exception "Enforcement failed" at
> > run
> > time. This gives me enough information to say ¿que?
> > 
> 
> It's coming from the following no-message enforce():
> 
>              enforce(!r.empty);
> 
> 
> https://github.com/D-Programming-Language/phobos/blob/master/std/algo
> rithm/iteration.d#L2481
> 
> You are using the no-seed version of reduce(), which uses the first element as seed, which means that the range cannot be empty.

Well that explanation (*) makes it abundantly clear that the error reporting from this part of Phobos is distinctly substandard, let alone below par.


(*) Which is clear and informative!
-- 
Russel. ============================================================================= Dr Russel Winder      t: +44 20 7585 2200   voip: sip:russel.winder@ekiga.net 41 Buckmaster Road    m: +44 7770 465 077   xmpp: russel@winder.org.uk London SW11 1EN, UK   w: www.russel.org.uk  skype: russel_winder



October 01, 2015
On Thursday, 1 October 2015 at 07:08:00 UTC, Russel Winder wrote:
> On Wed, 2015-09-30 at 23:35 -0700, Ali Çehreli via Digitalmars-d-learn wrote:
>> On 09/30/2015 10:46 PM, Russel Winder via Digitalmars-d-learn wrote:
>> > [...]
>> 
>> It's coming from the following no-message enforce():
>> 
>>              enforce(!r.empty);
>> 
>> 
>> https://github.com/D-Programming-Language/phobos/blob/master/std/algo
>> rithm/iteration.d#L2481
>> 
>> You are using the no-seed version of reduce(), which uses the first element as seed, which means that the range cannot be empty.
>
> Well that explanation (*) makes it abundantly clear that the error reporting from this part of Phobos is distinctly substandard, let alone below par.
>
>
> (*) Which is clear and informative!

Bug report? Then it'll get fixed.
October 01, 2015
Am Thu, 01 Oct 2015 08:52:43 +0000
schrieb John Colvin <john.loughran.colvin@gmail.com>:

> On Thursday, 1 October 2015 at 07:08:00 UTC, Russel Winder wrote:
> > On Wed, 2015-09-30 at 23:35 -0700, Ali Çehreli via Digitalmars-d-learn wrote:
> >> On 09/30/2015 10:46 PM, Russel Winder via Digitalmars-d-learn wrote:
> >> > [...]
> >> 
> >> It's coming from the following no-message enforce():
> >> 
> >>              enforce(!r.empty);
> >> 
> >> 
> >> https://github.com/D-Programming-Language/phobos/blob/master/std/algo rithm/iteration.d#L2481
> >> 
> >> You are using the no-seed version of reduce(), which uses the first element as seed, which means that the range cannot be empty.
> >
> > Well that explanation (*) makes it abundantly clear that the error reporting from this part of Phobos is distinctly substandard, let alone below par.
> >
> >
> > (*) Which is clear and informative!
> 
> Bug report? Then it'll get fixed.

The problem is that in out minds addition has an implicit seed value of 0 and multiplication has 1, so a potentially empty range doesn't immediately raise a red flag.

The correct thing to use, following this train of thought, is http://dlang.org/phobos/std_algorithm_iteration.html#.sum (Additionally it provides better accuracy when summing up floating-point values.)

-- 
Marco

October 01, 2015
On Thu, 2015-10-01 at 08:52 +0000, John Colvin via Digitalmars-d-learn wrote:
> […]
> 
> Bug report? Then it'll get fixed.

https://issues.dlang.org/show_bug.cgi?id=15133

Timer running…  ;-)

-- 
Russel. ============================================================================= Dr Russel Winder      t: +44 20 7585 2200   voip: sip:russel.winder@ekiga.net 41 Buckmaster Road    m: +44 7770 465 077   xmpp: russel@winder.org.uk London SW11 1EN, UK   w: www.russel.org.uk  skype: russel_winder