c455001.a

来自「linux下编程用 编译软件」· A 代码 · 共 165 行

A
165
字号
-- C455001.A--                             Grant of Unlimited Rights----     Under contracts F33600-87-D-0337, F33600-84-D-0280, MDA903-79-C-0687 and--     F08630-91-C-0015, the U.S. Government obtained unlimited rights in the--     software and documentation contained herein.  Unlimited rights are--     defined in DFAR 252.227-7013(a)(19).  By making this public release,--     the Government intends to confer upon all recipients unlimited rights--     equal to those held by the Government.  These rights include rights to--     use, duplicate, release or disclose the released technical data and--     computer software in whole or in part, in any manner and for any purpose--     whatsoever, and to have or permit others to do so.----                                    DISCLAIMER----     ALL MATERIALS OR INFORMATION HEREIN RELEASED, MADE AVAILABLE OR--     DISCLOSED ARE AS IS.  THE GOVERNMENT MAKES NO EXPRESS OR IMPLIED--     WARRANTY AS TO ANY MATTER WHATSOVER, INCLUDING THE CONDITIONS OF THE--     SOFTWARE, DOCUMENTATION OR OTHER INFORMATION RELEASED, MADE AVAILABLE--     OR DISCLOSED, OR THE OWNERSHIP, MERCHANTABILITY, OR FITNESS FOR A--     PARTICULAR PURPOSE OF SAID MATERIAL.--*---- OBJECTIVE:--     Check that universal fixed multiplying operators can be used without--     a conversion in contexts where the result type is determined.----     Note: This is intended to check the changes made to these operators--     in Ada 95; legacy tests should cover cases from Ada 83.---- CHANGE HISTORY:--      18 MAR 99   RLB    Initial version----!with Report; use Report;procedure C455001 is     type F1 is delta 2.0**(-1) range 0.0 .. 8.0;     type F2 is delta 2.0**(-2) range 0.0 .. 4.0;     type F3 is delta 2.0**(-3) range 0.0 .. 2.0;     A : F1;     B : F2;     C : F3;     type Fixed_Record is record	D : F1;        E : F2;     end record;     R : Fixed_Record;     function Ident_Fix (X : F3) return F3 is     begin          if Equal(3,3) then               return X;          else               return 0.0;          end if;     end Ident_Fix;begin     Test ("C455001", "Check that universal fixed multiplying operators " &                      "can be used without a conversion in contexts where " &                      "the result type is determined.");     A := 1.0; B := 1.0;     C := A * B; -- Assignment context.     if C /= Ident_Fix(1.0) then          Failed ("Incorrect results for multiplication (1) - result is " &		  F3'Image(C));     end if;     C := A / B;     if C /= Ident_Fix(1.0) then          Failed ("Incorrect results for division (1) - result is " &		  F3'Image(C));     end if;     A := 2.5;     C := A * 0.25;     if C /= Ident_Fix(0.625) then          Failed ("Incorrect results for multiplication (2) - result is " &		  F3'Image(C));     end if;     C := A / 4.0;     if C /= Ident_Fix(0.625) then          Failed ("Incorrect results for division (2) - result is " &		  F3'Image(C));     end if;     C := Ident_Fix(0.75);     C := C * 0.5;     if C /= Ident_Fix(0.375) then          Failed ("Incorrect results for multiplication (3) - result is " &		  F3'Image(C));     end if;     C := Ident_Fix(0.75);     C := C / 0.5;     if C /= Ident_Fix(1.5) then          Failed ("Incorrect results for division (3) - result is " &		  F3'Image(C));     end if;     A := 0.5; B := 0.3; -- Function parameter context.     if Ident_Fix(A * B) not in Ident_Fix(0.125) .. Ident_Fix(0.25) then          Failed ("Incorrect results for multiplication (4) - result is " &		  F3'Image(A * B)); -- Exact = 0.15     end if;     B := 0.8;     if Ident_Fix(A / B) not in Ident_Fix(0.5) .. Ident_Fix(0.75) then          Failed ("Incorrect results for division (4) - result is " &		  F3'Image(A / B));		-- Exact = 0.625..., but B is only restricted to the range		-- 0.75 .. 1.0, so the result can be anywhere in the range		-- 0.5 .. 0.75.     end if;     C := 0.875; B := 1.5;     R := (D => C * 4.0, E => B / 0.5); -- Aggregate context.     if R.D /= 3.5 then          Failed ("Incorrect results for multiplication (5) - result is " &		  F1'Image(R.D));     end if;     if R.E /= 3.0 then          Failed ("Incorrect results for division (5) - result is " &		  F2'Image(R.E));     end if;     A := 0.5;     C := A * F1'(B * 2.0); -- Qualified expression context.     if C /= Ident_Fix(1.5) then          Failed ("Incorrect results for multiplication (6) - result is " &		  F3'Image(C));     end if;     A := 4.0;     C := F1'(B / 0.5) / A;     if C /= Ident_Fix(0.75) then          Failed ("Incorrect results for division (6) - result is " &		  F3'Image(C));     end if;     Result;end C455001;

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?