aboutsummaryrefslogtreecommitdiffstats
path: root/gcc-4.9/gcc/testsuite/ada/acats/support/enumchek.ada
diff options
context:
space:
mode:
authorBen Cheng <bccheng@google.com>2014-03-25 22:37:19 -0700
committerBen Cheng <bccheng@google.com>2014-03-25 22:37:19 -0700
commit1bc5aee63eb72b341f506ad058502cd0361f0d10 (patch)
treec607e8252f3405424ff15bc2d00aa38dadbb2518 /gcc-4.9/gcc/testsuite/ada/acats/support/enumchek.ada
parent283a0bf58fcf333c58a2a92c3ebbc41fb9eb1fdb (diff)
downloadtoolchain_gcc-1bc5aee63eb72b341f506ad058502cd0361f0d10.tar.gz
toolchain_gcc-1bc5aee63eb72b341f506ad058502cd0361f0d10.tar.bz2
toolchain_gcc-1bc5aee63eb72b341f506ad058502cd0361f0d10.zip
Initial checkin of GCC 4.9.0 from trunk (r208799).
Change-Id: I48a3c08bb98542aa215912a75f03c0890e497dba
Diffstat (limited to 'gcc-4.9/gcc/testsuite/ada/acats/support/enumchek.ada')
-rw-r--r--gcc-4.9/gcc/testsuite/ada/acats/support/enumchek.ada65
1 files changed, 65 insertions, 0 deletions
diff --git a/gcc-4.9/gcc/testsuite/ada/acats/support/enumchek.ada b/gcc-4.9/gcc/testsuite/ada/acats/support/enumchek.ada
new file mode 100644
index 000000000..044c1a853
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/ada/acats/support/enumchek.ada
@@ -0,0 +1,65 @@
+-- THIS GENERIC PROCEDURE IS INTENDED FOR USE IN CONJUNCTION WITH THE ACVC
+-- CHAPTER 13 C TESTS. IT IS INSTANTIATED WITH TWO TYPES. THE FIRST IS AN
+-- ENUMERATION TYPE FOR WHICH AN ENUMERATION CLAUSE HAS BEEN GIVEN, AND THE
+-- SECOND IS AN INTEGER TYPE WHOSE 'SIZE IS THE SAME AS THE 'SIZE OF THIS
+-- ENUMERATION TYPE.
+
+-- THE PROCEDURE ENUM_CHECK IS THEN CALLED WITH THREE ARGUMENTS. THE FIRST IS
+-- AN ENUMERATION LITERAL FROM THE ENUMERATION TYPE, THE SECOND IS AN INTEGER
+-- LITERAL WHICH IS THE VALUE OF THE EXPECTED REPRESENTATION (TAKEN FROM THE
+-- ENUMERATION REPRESENTATION CLAUSE), AND THE THIRD IS A STRING DESCRIBING OR
+-- NAMING THE TYPE (USED IN A CALL TO FAILED IF THE REPRESENTATION CHECK FAILS).
+
+-- THE CHECK IS TO CONVERT THE ENUMERATION VALUE TO A BOOLEAN ARRAY WITH A
+-- LENGTH CORRESONDING TO THE 'SIZE OF THE ENUMERATION TYPE. AN INTEGER TYPE
+-- IS THEN CREATED WITH THIS SAME 'SIZE, AND THE REQUIRED REPRESENTATION VALUE
+-- IS CONVERTED FROM THIS TYPE TO A BOOLEAN ARRAY WITH THE SAME LENGTH. THE
+-- TWO BOOLEAN ARRAYS ARE THEN COMPARED AND SHOULD BE EQUAL. THE CONVERSIONS
+-- ARE PERFORMED USING APPROPRIATE INSTANTIATIONS OF UNCHECKED_CONVERSION.
+
+-- AUTHOR: ROBERT B. K. DEWAR, UNCOPYRIGHTED, PUBLIC DOMAIN USE AUTHORIZED
+
+GENERIC
+
+ TYPE ENUM_TYPE IS PRIVATE;
+ TYPE INT_TYPE IS RANGE <>;
+
+PROCEDURE ENUM_CHECK (TEST_VALUE : ENUM_TYPE;
+ REP_VALUE : INT_TYPE;
+ TYPE_ID : STRING);
+
+
+WITH UNCHECKED_CONVERSION;
+WITH REPORT; USE REPORT;
+
+PROCEDURE ENUM_CHECK (TEST_VALUE : ENUM_TYPE;
+ REP_VALUE : INT_TYPE;
+ TYPE_ID : STRING) IS
+
+ TYPE BIT_ARRAY_TYPE IS ARRAY (1 .. ENUM_TYPE'SIZE) OF BOOLEAN;
+ PRAGMA PACK (BIT_ARRAY_TYPE);
+
+ FUNCTION TO_BITS IS NEW UNCHECKED_CONVERSION (ENUM_TYPE, BIT_ARRAY_TYPE);
+ FUNCTION TO_BITS IS NEW UNCHECKED_CONVERSION (INT_TYPE, BIT_ARRAY_TYPE);
+
+ BIT_ARRAY_1 : BIT_ARRAY_TYPE;
+ BIT_ARRAY_2 : BIT_ARRAY_TYPE;
+
+ INT_VALUE : INT_TYPE := INT_TYPE (REP_VALUE);
+
+BEGIN
+
+ -- VERIFY CORRECT CALL (THIS IS A SANITY CHECK ON THE TEST ITSELF)
+
+ IF ENUM_TYPE'SIZE /= INT_TYPE'SIZE THEN
+ FAILED ("ERROR IN ENUM_CHECK CALL: SIZES DO NOT MATCH");
+ END IF;
+
+ BIT_ARRAY_1 := TO_BITS (TEST_VALUE);
+ BIT_ARRAY_2 := TO_BITS (INT_VALUE);
+
+ IF BIT_ARRAY_1 /= BIT_ARRAY_2 THEN
+ FAILED ("CHECK ON REPRESENTATION OF TYPE " & TYPE_ID & " FAILED.");
+ END IF;
+
+END ENUM_CHECK;