comp.lang.ada
 help / color / mirror / Atom feed
From: Bob Duff <bobduff@theworld.com>
Subject: Re: Instantiating package problems
Date: Wed, 06 Jan 2016 09:25:44 -0500
Date: 2016-01-06T09:25:44-05:00	[thread overview]
Message-ID: <87egduhjiv.fsf@theworld.com> (raw)
In-Reply-To: 084197af-8e37-4250-a083-b45bd9ab4609@googlegroups.com

Anh Vo <anhvofrcaus@gmail.com> writes:

> On Tuesday, January 5, 2016 at 7:31:00 PM UTC-8, Andrew Shvets wrote:
>> On Monday, January 4, 2016 at 3:49:32 PM UTC-5, Anh Vo wrote:
>> > On Sunday, January 3, 2016 at 4:07:30 PM UTC-8, Andrew Shvets wrote:
>> > > Hi Bob,
>> > > 
>> > > Thanks for writing back.  This is the entire example:
>> > > http://pastebin.com/GEJT3WzL
>> >  
>> > Just recommend to add a precondition to function Division as shown below. By the way, this feature is part of latest Ada (Ada 2012). In addition, you should think about adding precondition to other operations such as Addition where Input1 + Input2 <= Integer'Last and Input1 + Input2 >= Integer'Last. 
>> > 
>> >   function Division(
>> >     Input1 : in Integer;
>> >     Input2 : in Integer)
>> >       return Integer
>> >    with pre => Input2 /= 0;

I prefer predicates in a case like that:

    subtype Nonzero is Integer with Predicate => Nonzero /= 0;

And then Input2 can be of subtype Nonzero.  (Predicate is specific to
GNAT; use Static_Predicate if you want to conform to the Ada standard.)

>> I'm not sure that that worked.  I added it to my ads file and after
>> compilation and then re-running the application, this is what I got:
>> 
>> ....
>> 
>>  Division:        4
>> 
>> 
>> raised CONSTRAINT_ERROR : calculator.adb:33 divide by zero
>> 
>> Shouldn't the division function been prevented from running the actual division operation beforehand?
>
> The preconditions and postconditions are controlled by pragma
> Assertion_Policy. Thus, pragma Assertion_Policy(Check) must be added at the top
> of the package specification. Absent of this pragma is equivalent to pragma
> Assertion_Policy (Ignore). That means these conditions are ignored. By the way,
> ASSERTION_ERROR exception would be raised instead of CONSTRAINT_ERROR.

I wouldn't bother fooling about with Assertion_Policy.
Just use the -gnata switch.

If you do use Assertion_Policy, you probably want it in a global
configuration file, so it applies to all of your code.

- Bob

  parent reply	other threads:[~2016-01-06 14:25 UTC|newest]

Thread overview: 34+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-01-03 18:40 Instantiating package problems Andrew Shvets
2016-01-03 20:27 ` Georg Bauhaus
2016-01-03 21:21   ` Andrew Shvets
2016-01-03 21:04 ` Jeffrey R. Carter
2016-01-03 21:27   ` Andrew Shvets
2016-01-03 22:39     ` Jeffrey R. Carter
2016-01-03 22:08 ` Bob Duff
2016-01-04  0:07   ` Andrew Shvets
2016-01-04  0:30     ` Andrew Shvets
2016-01-04 13:43       ` G.B.
2016-01-04 14:23       ` Brian Drummond
2016-01-04 20:49     ` Anh Vo
2016-01-04 21:10       ` Dmitry A. Kazakov
2016-01-04 22:39         ` Anh Vo
2016-01-05  1:42           ` Anh Vo
2016-01-05  7:35           ` Dmitry A. Kazakov
2016-01-06  2:46       ` Andrew Shvets
2016-01-06  8:53         ` Dmitry A. Kazakov
2016-01-06  3:30       ` Andrew Shvets
2016-01-06  4:51         ` Anh Vo
2016-01-06  4:54           ` Anh Vo
2016-01-06  5:00           ` Andrew Shvets
2016-01-06  5:07             ` Anh Vo
2016-01-07  4:41               ` Andrew Shvets
2016-01-07  5:41                 ` Anh Vo
2016-01-09 20:14                   ` Andrew Shvets
2016-01-10 19:43                     ` Andrew Shvets
2016-01-10 21:38                       ` Jeffrey R. Carter
2016-01-10 21:50                       ` Georg Bauhaus
2016-01-10 21:58                         ` Andrew Shvets
2016-01-06 13:07             ` G.B.
2016-01-07  4:42               ` Andrew Shvets
2016-01-06 14:25           ` Bob Duff [this message]
2016-01-06 23:48             ` Anh Vo
replies disabled

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox