URL
https://opencores.org/ocsvn/openrisc_me/openrisc_me/trunk
Subversion Repositories openrisc_me
[/] [openrisc/] [trunk/] [gnu-src/] [gcc-4.5.1/] [gcc/] [testsuite/] [ada/] [acats/] [tests/] [cxf/] [cxf1001.a] - Rev 294
Compare with Previous | Blame | View Log
-- CXF1001.A---- Grant of Unlimited Rights---- Under contracts F33600-87-D-0337, F33600-84-D-0280, MDA903-79-C-0687,-- F08630-91-C-0015, and DCA100-97-D-0025, 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 WHATSOEVER, 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 values of 2 and 10 are allowable values for Machine_Radix-- of a decimal first subtype.-- Check that the value of Decimal.Max_Decimal_Digits is at least 18;-- the value of Decimal.Max_Scale is at least 18; the value of-- Decimal.Min_Scale is at most 0.---- TEST DESCRIPTION:-- This test examines the Machine_Radix attribute definition clause-- and its effect on Decimal fixed point types, as well as several-- constants from the package Ada.Decimal.-- The first subtest checks that the Machine_Radix attribute will-- return the value set for Machine_Radix by an attribute definition-- clause. The second and third subtests examine differences between-- the binary and decimal scaling of a type, based on the radix-- representation. The final subtest examines the values-- assigned to constants Min_Scale, Max_Scale, and Max_Decimal_Digits,-- found in the package Ada.Decimal.------ CHANGE HISTORY:-- 06 Dec 94 SAIC ACVC 2.0-- 29 Dec 94 SAIC Restructured Radix 10 and Radix 2 test blocks.----!with Report;with Ada.Decimal;procedure CXF1001 isbeginReport.Test ("CXF1001", "Check that values of 2 and 10 are allowable " &"values for Machine_Radix of a decimal first " &"subtype. Check that the value of " &"Decimal.Max_Decimal_Digits is at least 18; " &"the value of Decimal.Max_Scale is at least " &"18; the value of Decimal.Min_Scale is at " &"most 0");Attribute_Check_Block:declareDel : constant := 1.0/10**2;Const_Digits : constant := 3;Two : constant := 2;Ten : constant := 10;type Radix_2_Type_1 is delta 0.01 digits 7;type Radix_2_Type_2 is delta Ada.Decimal.Min_Delta digits 10;type Radix_2_Type_3 isdelta 0.000_1 digits Ada.Decimal.Max_Decimal_Digits;type Radix_10_Type_1 is delta 10.0**(-Ada.Decimal.Max_Scale) digits 8;type Radix_10_Type_2 is delta 10.0**(-Ada.Decimal.Min_Scale) digits 6;type Radix_10_Type_3 is delta Ada.Decimal.Max_Delta digits 15;-- Use an attribute definition clause to set the Machine_Radix for a-- decimal first subtype to either 2 or 10.for Radix_2_Type_1'Machine_Radix use 2;for Radix_2_Type_2'Machine_Radix use Two;for Radix_2_Type_3'Machine_Radix use 10-8;for Radix_10_Type_1'Machine_Radix use 2*15/Const_Digits;for Radix_10_Type_2'Machine_Radix use Ten;for Radix_10_Type_3'Machine_Radix use Radix_10_Type_2'Machine_Radix;begin-- Check that the attribute 'Machine_Radix returns the value assigned-- by the attribute definition clause.if Radix_2_Type_1'Machine_Radix /= 2 or elseRadix_2_Type_2'Machine_Radix /= 2 or elseRadix_2_Type_3'Machine_Radix /= 2thenReport.Failed("Incorrect radix value returned, 2 expected");end if;if Radix_10_Type_1'Machine_Radix /= 10 or elseRadix_10_Type_2'Machine_Radix /= 10 or elseRadix_10_Type_3'Machine_Radix /= 10thenReport.Failed("Incorrect radix value returned, 10 expected");end if;exceptionwhen others => Report.Failed ("Exception raised in Attr_Check_Block");end Attribute_Check_Block;Radix_Block:-- Premises:-- 1) Choose several numbers, from types using either decimal scaling or-- binary scaling.-- 1) Repetitively add these numbers to themselves.-- 3) Validate that the result is the expected result, regardless of the-- scaling used in the definition of the type.declareNumber_Of_Values : constant := 3;Loop_Count : constant := 1000;type Radix_2_Type is delta 0.0001 digits 10;type Radix_10_Type is delta 0.0001 digits 10;for Radix_2_Type'Machine_Radix use 2;for Radix_10_Type'Machine_Radix use 10;type Result_Record_Type is recordRad_2 : Radix_2_Type;Rad_10 : Radix_10_Type;end record;type Result_Array_Type is array (1..Number_Of_Values)of Result_Record_Type;Result_Array : Result_Array_Type := ((50.00, 50.00),(613.00, 613.00),(72.70, 72.70));function Repetitive_Radix_2_Add (Value : in Radix_2_Type)return Radix_2_Type isResult : Radix_2_Type := 0.0;beginfor i in 1..Loop_Count loopResult := Result + Value;end loop;return Result;end Repetitive_Radix_2_Add;function Repetitive_Radix_10_Add (Value : in Radix_10_Type)return Radix_10_Type isResult : Radix_10_Type := 0.0;beginfor i in 1..Loop_Count loopResult := Result + Value;end loop;return Result;end Repetitive_Radix_10_Add;begin-- Radix 2 Cases, three different values.-- Compare the result of the repetitive addition with the expected-- Radix 2 result, as well as with the Radix 10 value after type-- conversion.if Repetitive_Radix_2_Add(0.05) /= Result_Array(1).Rad_2 orRepetitive_Radix_2_Add(0.05) /= Radix_2_Type(Result_Array(1).Rad_10)thenReport.Failed("Incorrect Radix 2 Result, Case 1");end if;if Repetitive_Radix_2_Add(0.613) /=Result_Array(2).Rad_2 orRepetitive_Radix_2_Add(0.613) /=Radix_2_Type(Result_Array(2).Rad_10)thenReport.Failed("Incorrect Radix 2 Result, Case 2");end if;if Repetitive_Radix_2_Add(0.0727) /=Result_Array(3).Rad_2 orRepetitive_Radix_2_Add(0.0727) /=Radix_2_Type(Result_Array(3).Rad_10)thenReport.Failed("Incorrect Radix 2 Result, Case 3");end if;-- Radix 10 Cases, three different values.-- Compare the result of the repetitive addition with the expected-- Radix 10 result, as well as with the Radix 2 value after type-- conversion.if Repetitive_Radix_10_Add(0.05) /= Result_Array(1).Rad_10 orRepetitive_Radix_10_Add(0.05) /= Radix_10_Type(Result_Array(1).Rad_2)thenReport.Failed("Incorrect Radix 10 Result, Case 1");end if;if Repetitive_Radix_10_Add(0.613) /=Result_Array(2).Rad_10 orRepetitive_Radix_10_Add(0.613) /=Radix_10_Type(Result_Array(2).Rad_2)thenReport.Failed("Incorrect Radix 10 Result, Case 2");end if;if Repetitive_Radix_10_Add(0.0727) /=Result_Array(3).Rad_10 orRepetitive_Radix_10_Add(0.0727) /=Radix_10_Type(Result_Array(3).Rad_2)thenReport.Failed("Incorrect Radix 10 Result, Case 3");end if;exceptionwhen others => Report.Failed ("Exception raised in Radix_Block");end Radix_Block;Size_Block:-- Check the implementation max/min values of constants declared in-- package Ada.Decimal.declareMinimum_Required_Size : constant := 18;Maximum_Allowed_Size : constant := 0;begin-- Check that the Max_Decimal_Digits value is at least 18.if not (Ada.Decimal.Max_Decimal_Digits >= Minimum_Required_Size) thenReport.Failed("Insufficient size provided for Max_Decimal_Digits");end if;-- Check that the Max_Scale value is at least 18.if not (Ada.Decimal.Max_Scale >= Minimum_Required_Size) thenReport.Failed("Insufficient size provided for Max_Scale");end if;-- Check that the Min_Scale value is at most 0.if not (Ada.Decimal.Min_Scale <= Maximum_Allowed_Size) thenReport.Failed("Too large a value provided for Min_Scale");end if;exceptionwhen others => Report.Failed ("Exception raised in Size_Block");end Size_Block;Report.Result;end CXF1001;
