comp.lang.ada
 help / color / mirror / Atom feed
From: Anh Vo <anhvofrcaus@gmail.com>
Subject: Re: Instantiating package problems
Date: Wed, 6 Jan 2016 15:48:14 -0800 (PST)
Date: 2016-01-06T15:48:14-08:00	[thread overview]
Message-ID: <9a74db40-302a-4122-a464-68c736e9126b@googlegroups.com> (raw)
In-Reply-To: <87egduhjiv.fsf@theworld.com>

On Wednesday, January 6, 2016 at 6:25:47 AM UTC-8, Bob Duff wrote:
> 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.

I like to stay away from compiler dependence as much as I can. Thus, I chose to stay with Ada Standard in this case.
 
> If you do use Assertion_Policy, you probably want it in a global
> configuration file, so it applies to all of your code.

I agree that this is a good advice for large number of packages.

Anh Vo


      reply	other threads:[~2016-01-06 23:48 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
2016-01-06 23:48             ` Anh Vo [this message]
replies disabled

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