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 Path: border2.nntp.dca1.giganews.com!nntp.giganews.com!newspeer1.nac.net!feeder.erje.net!eu.feeder.erje.net!eternal-september.org!feeder.eternal-september.org!news.eternal-september.org!.POSTED!not-for-mail From: "G.B." Newsgroups: comp.lang.ada Subject: Re: Another Ada/ARM Cortex M4F tutorial up, with some interesting results Date: Mon, 22 Sep 2014 14:14:36 +0200 Organization: A noiseless patient Spider Message-ID: References: Reply-To: nonlegitur@futureapps.de Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Injection-Date: Mon, 22 Sep 2014 12:14:36 +0000 (UTC) Injection-Info: mx05.eternal-september.org; posting-host="b96887e80893c84a90c3007226ca0d1c"; logging-data="19880"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX19MI9meJJcBC9Dv1swEALwlSGU4NhE/XWM=" User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:24.0) Gecko/20100101 Thunderbird/24.6.0 In-Reply-To: Cancel-Lock: sha1:VnpcWS+7XSxOvB8ctqnaQn3bOXU= Xref: number.nntp.dca.giganews.com comp.lang.ada:189082 Date: 2014-09-22T14:14:36+02:00 List-Id: On 22.09.14 07:51, Mike Silva wrote: > Sure wish I had this 20-30 years ago! > > http://www.embeddedrelated.com/showarticle/625.php > The source uses GNAT's own 'Enum_Rep, in part for use during compile time checks. I wonder if the effect can be achieved in portable Ada, at very little cost. The following example code is set up to generate static failures. Is there a way to reliably get rid of the entities declared for testing only, as, I guess, they can potentially make it to object code? package Plain_Ada is type Word is mod 2**16; type Lights is new Word; Red : constant Lights := 2#0001#; Green : constant Lights := 2#0010#; Blue : constant Lights := 2#0101#; -- deliberate Yellow : constant Lights := 2#0100#; Flashy : constant Lights := Red or Green or Blue or Yellow; private package Compile_Time_Checks is type Yes is new Boolean range True .. True; Expected_Bits : constant Yes := Yes (Flashy = 2#0111# and (Blue or 1) /= 2#0000#); No_Overlap : constant := (case 1 is when Red or Green => 1, when Red or Blue => 1, when Red or Yellow => 1, when Green or Blue => 1, when Green or Yellow => 1, when Blue or Yellow => 1, when others => 1); end Compile_Time_Checks; end Plain_Ada; One way not have traces of the tests in code is, I suppose, to put the tests into some pramga that establishes Boolean context, such as pragma Assert.