| -- FXF2A00.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. |
| --* |
| -- |
| -- FOUNDATION DESCRIPTION: |
| -- This foundation declares supporting objects, types and a generic |
| -- function for testing decimal fixed point operations. |
| -- |
| -- The generic function contains a loop which steps through two arrays: |
| -- one of binary operations and one of operands. For each iteration, the |
| -- current operation is performed on the current operand and a variable |
| -- "Result" e.g.: |
| -- |
| -- Result := Operation(2)(Operand(3), Result); |
| -- |
| -- The result of each operation is cumulated in Result and returned to |
| -- the caller when the loop completes. |
| -- |
| -- CHANGE HISTORY: |
| -- 12 Mar 96 SAIC Prerelease version for ACVC 2.1. |
| -- |
| --! |
| |
| package FXF2A00 is |
| |
| Loop_Count : constant := 30000; -- # test iterations. |
| Optr_Count : constant := 6; -- # operations in op sequence. |
| Opnd_Count : constant := 5; -- # different operands. |
| |
| type Loop_Range is range 1 .. Loop_Count; -- range 1 .. 30000. |
| type Optr_Range is mod Optr_Count; -- range 0 .. 5. |
| type Opnd_Range is mod Opnd_Count; -- range 0 .. 4. |
| |
| |
| generic |
| |
| type Decimal_Fixed is delta <> digits <>; |
| |
| type Operator_Ptr is access |
| function (L, R : Decimal_Fixed) return Decimal_Fixed; |
| |
| type Operator_Table is array (Optr_Range) of Operator_Ptr; |
| type Operand_Table is array (Opnd_Range) of Decimal_Fixed; |
| |
| function Operations_Loop (Initial : Decimal_Fixed; |
| Operator: Operator_Table; |
| Operand : Operand_Table) return Decimal_Fixed; |
| |
| end FXF2A00; |
| |
| |
| --==================================================================-- |
| |
| |
| package body FXF2A00 is |
| |
| function Operations_Loop (Initial : Decimal_Fixed; |
| Operator: Operator_Table; |
| Operand : Operand_Table) return Decimal_Fixed is |
| |
| Result : Decimal_Fixed := Initial; -- Cumulator. |
| Optr_Index : Optr_Range := 0; -- Index into operations table. |
| Opnd_Index : Opnd_Range := 0; -- Index into operand table. |
| |
| begin |
| for Count in Loop_Range loop |
| Result := Operator(Optr_Index) (Result, Operand(Opnd_Index)); |
| Optr_Index := Optr_Index + 1; -- Modular addition. |
| Opnd_Index := Opnd_Index + 1; -- Modular addition. |
| end loop; |
| |
| return Result; |
| end Operations_Loop; |
| |
| end FXF2A00; |