comp.lang.ada
 help / color / mirror / Atom feed
From: "John B. Matthews" <nospam@nospam.com>
Subject: Re: Should be getting a constraint error in this code
Date: Sat, 24 Jul 2004 03:35:43 GMT
Date: 2004-07-24T03:35:43+00:00	[thread overview]
Message-ID: <nospam-568B89.23363723072004@news-server.woh.rr.com> (raw)
In-Reply-To: gTjMc.2800$q9.4134490@news4.srv.hcvlny.cv.net

In article <gTjMc.2800$q9.4134490@news4.srv.hcvlny.cv.net>,
 Keith Boruff <kboruff@optonline.net> wrote:

> Hey all,
> [...]
> In my studies this evening, I wrote the following trivial program to 
> force a constraint error:
> 
> with Ada.Text_Io; use Ada.Text_Io;
> 
> procedure Constraint_Tests is
> 
>    type Exam_Mark is range 0 .. 100;
> 
>    English   : Exam_Mark := 72;
>    Math      : Exam_Mark := 68;
>    Computing : Exam_Mark := 76;
>    Average   : Exam_Mark;
> 
> begin
> 
>   Put("Average exam mark is ");
> 
>   -- I expect a constraint exception in this statement
>   -- because English + Math + Computing > 100
>   -- NOTE: On my machine, Exam_Mark'Base'Last = 127
>   Average := (English + Math + Computing) / 3;
>   Put_line(Exam_Mark'Image(Average));
> 
> end Constraint_Tests;
> 
> Ok, the problem I'm having is that I'm expecting a constraint exception 
> to occur because (English + Math + Computing) = 216 and the largest 
> value of its base is 127 (on my machine).
> 
> However, I'm not getting this at all. I get no constraint errors 
> whatsoever and what's worse, Average = 243. First of all, why didn't I 
> get a constraint error here (since Average is of type Exam_Mark)? 
> Secondly, where in the heck did 243 come from?
> 
> Now, if I omit the statement in the code and instead write:
> Average := English + Math + Computing;
> 
> I get a constraint error as expected. When I use the '/' operator 
> though, all bets are off.
> 
> Is there something I'm not seeing here? Is there something about the / 
> operator I should know about?

By default, GNAT disables overflow checking; you can enable it 
with the compiler switch -gnato. See section 3.2.5, "Run-Time 
Checks," in the "GNAT User's Guide" for more on the distiction 
between overflow and other constraint checks.

[...]
> Thanks,
> Keith Boruff

John
----
jmatthews at wright dot edu
www dot wright dot edu/~john.matthews/



  parent reply	other threads:[~2004-07-24  3:35 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2004-07-24  2:32 Should be getting a constraint error in this code Keith Boruff
2004-07-24  3:33 ` Robert I. Eachus
2004-07-24  3:35 ` John B. Matthews [this message]
2004-07-24 15:08 ` Björn Persson
2004-07-25 13:54   ` Martin Krischik
2004-07-25 15:14     ` Nick Roberts
  -- strict thread matches above, loose matches on Subject: below --
2004-07-26  6:42 Christoph Karl Walter Grein
replies disabled

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