From mboxrd@z Thu Jan 1 00:00:00 1970 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on polar.synack.me X-Spam-Level: X-Spam-Status: No, score=-0.3 required=5.0 tests=BAYES_00, REPLYTO_WITHOUT_TO_CC autolearn=no autolearn_force=no version=3.4.4 X-Google-Thread: 103376,fc8384b47d495708,start X-Google-Attributes: gid103376,public X-Google-Language: ENGLISH,ASCII-7-bit Path: g2news1.google.com!news1.google.com!news.glorb.com!news3.optonline.net!news4.srv.hcvlny.cv.net.POSTED!not-for-mail From: Keith Boruff Reply-To: kboruff@optonline.net User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.7) Gecko/20040616 X-Accept-Language: en-us, en MIME-Version: 1.0 Newsgroups: comp.lang.ada Subject: Should be getting a constraint error in this code Content-Type: text/plain; charset=us-ascii; format=flowed Content-Transfer-Encoding: 7bit Message-ID: Date: Sat, 24 Jul 2004 02:32:44 GMT NNTP-Posting-Host: 24.185.86.33 X-Complaints-To: abuse@cv.net X-Trace: news4.srv.hcvlny.cv.net 1090636364 24.185.86.33 (Fri, 23 Jul 2004 22:32:44 EDT) NNTP-Posting-Date: Fri, 23 Jul 2004 22:32:44 EDT Organization: Optimum Online Xref: g2news1.google.com comp.lang.ada:2365 Date: 2004-07-24T02:32:44+00:00 List-Id: Hey all, Forgive me for posting such a trivial problem here but I couldn't seem to find an answer in any of the FAQs I know of nor DejaNews. Though I'm not a novice programmer, I am a novice Ada programmer. 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? Or... could this possibly be a bug in the compiler itself (using GNAT)? I'm embarrassed to be posting such a trivial program but it really bothers me that the behavior is not what I expect. If anyone has any suggestions, I'd appreciate some info on the matter... even if it's to tell me to RTFM (... as long as you provide a link). Thanks, Keith Boruff