summaryrefslogtreecommitdiff
path: root/gcc/testsuite/ada/acats/tests/cxg/cxg1001.a
diff options
context:
space:
mode:
authorupstream source tree <ports@midipix.org>2015-03-15 20:14:05 -0400
committerupstream source tree <ports@midipix.org>2015-03-15 20:14:05 -0400
commit554fd8c5195424bdbcabf5de30fdc183aba391bd (patch)
tree976dc5ab7fddf506dadce60ae936f43f58787092 /gcc/testsuite/ada/acats/tests/cxg/cxg1001.a
downloadcbb-gcc-4.6.4-554fd8c5195424bdbcabf5de30fdc183aba391bd.tar.bz2
cbb-gcc-4.6.4-554fd8c5195424bdbcabf5de30fdc183aba391bd.tar.xz
obtained gcc-4.6.4.tar.bz2 from upstream website;upstream
verified gcc-4.6.4.tar.bz2.sig; imported gcc-4.6.4 source tree from verified upstream tarball. downloading a git-generated archive based on the 'upstream' tag should provide you with a source tree that is binary identical to the one extracted from the above tarball. if you have obtained the source via the command 'git clone', however, do note that line-endings of files in your working directory might differ from line-endings of the respective files in the upstream repository.
Diffstat (limited to 'gcc/testsuite/ada/acats/tests/cxg/cxg1001.a')
-rw-r--r--gcc/testsuite/ada/acats/tests/cxg/cxg1001.a276
1 files changed, 276 insertions, 0 deletions
diff --git a/gcc/testsuite/ada/acats/tests/cxg/cxg1001.a b/gcc/testsuite/ada/acats/tests/cxg/cxg1001.a
new file mode 100644
index 000000000..01a0f061e
--- /dev/null
+++ b/gcc/testsuite/ada/acats/tests/cxg/cxg1001.a
@@ -0,0 +1,276 @@
+-- CXG1001.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 the subprograms defined in the package
+-- Ada.Numerics.Generic_Complex_Types provide correct results.
+-- Specifically, check the functions Re, Im (both versions), procedures
+-- Set_Re, Set_Im (both versions), functions Compose_From_Cartesian (all
+-- versions), Compose_From_Polar, Modulus, Argument, and "abs".
+--
+-- TEST DESCRIPTION:
+-- The generic package Generic_Complex_Types
+-- is instantiated with a real type (new Float), and the results
+-- produced by the specified subprograms are verified.
+--
+-- APPLICABILITY CRITERIA:
+-- This test applies only to implementations supporting the
+-- Numerics Annex.
+--
+--
+-- CHANGE HISTORY:
+-- 06 Dec 94 SAIC ACVC 2.0
+-- 15 Nov 95 SAIC Corrected visibility problems for ACVC 2.0.1.
+-- Modified subtest for Compose_From_Polar.
+-- 29 Sep 96 SAIC Incorporated reviewer comments.
+--
+--!
+
+with Ada.Numerics.Generic_Complex_Types;
+with Report;
+
+procedure CXG1001 is
+
+begin
+
+ Report.Test ("CXG1001", "Check that the subprograms defined in " &
+ "the package Ada.Numerics.Generic_Complex_Types " &
+ "provide correct results");
+
+ Test_Block:
+ declare
+
+ type Real_Type is new Float;
+
+ package Complex_Pack is new
+ Ada.Numerics.Generic_Complex_Types(Real_Type);
+
+ use type Complex_Pack.Complex;
+
+ -- Declare a zero valued complex number.
+ Complex_Zero : constant Complex_Pack.Complex := (0.0, 0.0);
+
+ TC_Complex : Complex_Pack.Complex := Complex_Zero;
+ TC_Imaginary : Complex_Pack.Imaginary;
+
+ begin
+
+ -- Check that the procedures Set_Re and Set_Im (both versions) provide
+ -- correct results.
+
+ declare
+ TC_Complex_Real_Field : Complex_Pack.Complex := (5.0, 0.0);
+ TC_Complex_Both_Fields : Complex_Pack.Complex := (5.0, 7.0);
+ begin
+
+ Complex_Pack.Set_Re(X => TC_Complex, Re => 5.0);
+
+ if TC_Complex /= TC_Complex_Real_Field then
+ Report.Failed("Incorrect results from Procedure Set_Re");
+ end if;
+
+ Complex_Pack.Set_Im(X => TC_Complex, Im => 7.0);
+
+ if TC_Complex.Re /= 5.0 or
+ TC_Complex.Im /= 7.0 or
+ TC_Complex /= TC_Complex_Both_Fields
+ then
+ Report.Failed("Incorrect results from Procedure Set_Im " &
+ "with Complex argument");
+ end if;
+
+ Complex_Pack.Set_Im(X => TC_Imaginary, Im => 3.0);
+
+
+ if Complex_Pack.Im(TC_Imaginary) /= 3.0 then
+ Report.Failed("Incorrect results returned following the use " &
+ "of Procedure Set_Im with Imaginary argument");
+ end if;
+
+ end;
+
+
+ -- Check that the functions Re and Im (both versions) provide
+ -- correct results.
+
+ declare
+ TC_Complex_1 : Complex_Pack.Complex := (1.0, 0.0);
+ TC_Complex_2 : Complex_Pack.Complex := (0.0, 2.0);
+ TC_Complex_3 : Complex_Pack.Complex := (4.0, 3.0);
+ begin
+
+ -- Function Re.
+
+ if Complex_Pack.Re(X => TC_Complex_1) /= 1.0 or
+ Complex_Pack.Re(X => TC_Complex_2) /= 0.0 or
+ Complex_Pack.Re(X => TC_Complex_3) /= 4.0
+ then
+ Report.Failed("Incorrect results from Function Re");
+ end if;
+
+ -- Function Im; version with Complex argument.
+
+ if Complex_Pack.Im(X => TC_Complex_1) /= 0.0 or
+ Complex_Pack.Im(X => TC_Complex_2) /= 2.0 or
+ Complex_Pack.Im(X => TC_Complex_3) /= 3.0
+ then
+ Report.Failed("Incorrect results from Function Im " &
+ "with Complex argument");
+ end if;
+
+
+ -- Function Im; version with Imaginary argument.
+
+ if Complex_Pack.Im(Complex_Pack.i) /= 1.0 or
+ Complex_Pack.Im(Complex_Pack.j) /= 1.0
+ then
+ Report.Failed("Incorrect results from use of Function Im " &
+ "when used with an Imaginary argument");
+ end if;
+
+ end;
+
+
+ -- Verify the results of the three versions of Function
+ -- Compose_From_Cartesian
+
+ declare
+
+ Zero : constant Real_Type := 0.0;
+ Six : constant Real_Type := 6.0;
+
+ TC_Complex_1 : Complex_Pack.Complex := (3.0, 8.0);
+ TC_Complex_2 : Complex_Pack.Complex := (Six, Zero);
+ TC_Complex_3 : Complex_Pack.Complex := (Zero, 1.0);
+
+ begin
+
+ TC_Complex := Complex_Pack.Compose_From_Cartesian(3.0, 8.0);
+
+ if TC_Complex /= TC_Complex_1 then
+ Report.Failed("Incorrect results from Function " &
+ "Compose_From_Cartesian - 1");
+ end if;
+
+ -- If only one component is given, the other component is
+ -- implicitly zero (Both components are set by the following two
+ -- function calls).
+
+ TC_Complex := Complex_Pack.Compose_From_Cartesian(Re => 6.0);
+
+ if TC_Complex /= TC_Complex_2 then
+ Report.Failed("Incorrect results from Function " &
+ "Compose_From_Cartesian - 2");
+ end if;
+
+ TC_Complex :=
+ Complex_Pack.Compose_From_Cartesian(Im => Complex_Pack.i);
+
+ if TC_Complex /= TC_Complex_3 then
+ Report.Failed("Incorrect results from Function " &
+ "Compose_From_Cartesian - 3");
+ end if;
+
+ end;
+
+
+ -- Verify the results of Function Compose_From_Polar, Modulus, "abs",
+ -- and Argument.
+
+ declare
+
+ use Complex_Pack;
+
+ TC_Modulus,
+ TC_Argument : Real_Type := 0.0;
+
+
+ Angle_0 : constant Real_Type := 0.0;
+ Angle_90 : constant Real_Type := 90.0;
+ Angle_180 : constant Real_Type := 180.0;
+ Angle_270 : constant Real_Type := 270.0;
+ Angle_360 : constant Real_Type := 360.0;
+
+ begin
+
+ -- Verify the result of Function Compose_From_Polar.
+ -- When the value of the parameter Modulus is zero, the
+ -- Compose_From_Polar function yields a result of zero.
+
+ if Compose_From_Polar(0.0, 30.0, 360.0) /= Complex_Zero
+ then
+ Report.Failed("Incorrect result from Function " &
+ "Compose_From_Polar - 1");
+ end if;
+
+ -- When the value of the parameter Argument is equal to a multiple
+ -- of the quarter cycle, the result of the Compose_From_Polar
+ -- function with specified cycle lies on one of the axes.
+
+ if Compose_From_Polar( 5.0, Angle_0, Angle_360) /= (5.0, 0.0) or
+ Compose_From_Polar( 5.0, Angle_90, Angle_360) /= (0.0, 5.0) or
+ Compose_From_Polar(-5.0, Angle_180, Angle_360) /= (5.0, 0.0) or
+ Compose_From_Polar(-5.0, Angle_270, Angle_360) /= (0.0, 5.0) or
+ Compose_From_Polar(-5.0, Angle_90, Angle_360) /= (0.0, -5.0) or
+ Compose_From_Polar( 5.0, Angle_270, Angle_360) /= (0.0, -5.0)
+ then
+ Report.Failed("Incorrect result from Function " &
+ "Compose_From_Polar - 2");
+ end if;
+
+ -- When the parameter to Function Argument represents a point on
+ -- the non-negative real axis, the function yields a zero result.
+
+ if Argument(Complex_Zero, Angle_360) /= 0.0 then
+ Report.Failed("Incorrect result from Function Argument");
+ end if;
+
+ -- Function Modulus
+
+ if Modulus(Complex_Zero) /= 0.0 or
+ Modulus(Compose_From_Polar( 5.0, Angle_90, Angle_360)) /= 5.0 or
+ Modulus(Compose_From_Polar(-5.0, Angle_180, Angle_360)) /= 5.0
+ then
+ Report.Failed("Incorrect results from Function Modulus");
+ end if;
+
+ -- Function "abs", a rename of Function Modulus.
+
+ if "abs"(Complex_Zero) /= 0.0 or
+ "abs"(Compose_From_Polar( 5.0, Angle_90, Angle_360)) /= 5.0 or
+ "abs"(Compose_From_Polar(-5.0, Angle_180, Angle_360)) /= 5.0
+ then
+ Report.Failed("Incorrect results from Function abs");
+ end if;
+
+ end;
+
+ exception
+ when others => Report.Failed ("Exception raised in Test_Block");
+ end Test_Block;
+
+ Report.Result;
+
+end CXG1001;