| -- C452001.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: |
| -- For a type extension, check that predefined equality is defined in |
| -- terms of the primitive equals operator of the parent type and any |
| -- tagged components of the extension part. |
| -- |
| -- For other composite types, check that the primitive equality operator |
| -- of any matching tagged components is used to determine equality of the |
| -- enclosing type. |
| -- |
| -- For private types, check that predefined equality is defined in |
| -- terms of the user-defined (primitive) operator of the full type if |
| -- the full type is tagged. The partial view of the type may be |
| -- tagged or untagged. Check that predefined equality for a private |
| -- type whose full view is untagged is defined in terms of the |
| -- predefined equality operator of its full type. |
| -- |
| -- TEST DESCRIPTION: |
| -- Tagged types are declared and used as components in several |
| -- differing composite type declarations, both tagged and untagged. |
| -- To differentiate between predefined and primitive equality |
| -- operations, user-defined equality operators are declared for |
| -- each component type that is to contribute to the equality |
| -- operator of the composite type that houses it. All user-defined |
| -- equality operations are designed to yield the opposite result |
| -- from the predefined operator, given the same component values. |
| -- |
| -- For cases where primitive equality is to be incorporated into |
| -- equality for the enclosing composite type, values are assigned |
| -- to the component type so that user-defined equality will return |
| -- True. If predefined equality is to be used instead, then the |
| -- same strategy results in the equality operator returning False. |
| -- |
| -- When equality for a type incorporates the user-defined equality |
| -- operator of one of its component types, the resulting operator |
| -- is considered to be the predefined operator of the composite type. |
| -- This case is confirmed by defining an tagged component of an |
| -- untagged composite type, then using the resulting untagged type |
| -- as a component of another composite type. The user-defined operator |
| -- for the lowest level should still be called. |
| -- |
| -- Three cases are set up to test private types: |
| -- |
| -- Case 1 Case 2 Case 3 |
| -- partial view: tagged untagged untagged |
| -- full view: tagged tagged untagged |
| -- |
| -- Types are declared for each of the above cases and user-defined |
| -- (primitive) operators are declared following the full type |
| -- declaration of each type (i.e., in the private part). |
| -- |
| -- Values are assigned into objects of these types using the same |
| -- strategy outlined above. Cases 1 and 2 should execute the |
| -- user-defined operator. Case 3 should ignore the user-defined |
| -- operator and user predefined equality for the type. |
| -- |
| -- |
| -- CHANGE HISTORY: |
| -- 06 Dec 94 SAIC ACVC 2.0 |
| -- 19 Dec 94 SAIC Removed RM references from objective text. |
| -- 15 Nov 95 SAIC Fixed for 2.0.1 |
| -- 04 NOV 96 SAIC Typographical revision |
| -- |
| --! |
| |
| package c452001_0 is |
| |
| type Point is |
| record |
| X : Integer := 0; |
| Y : Integer := 0; |
| end record; |
| |
| type Circle is tagged |
| record |
| Center : Point; |
| Radius : Integer; |
| end record; |
| |
| function "=" (L, R : Circle) return Boolean; |
| |
| type Colors is (Red, Orange, Yellow, Green, Blue, Purple, Black, White); |
| |
| type Colored_Circle is new Circle |
| with record |
| Color : Colors := White; |
| end record; |
| |
| function "=" (L, R : Colored_Circle) return Boolean; |
| -- Override predefined equality for this tagged type. Predefined |
| -- equality should incorporate user-defined (primitive) equality |
| -- from type Circle. See C340001 for a test of that feature. |
| |
| -- Equality is overridden to ensure that predefined equality |
| -- incorporates this user-defined function for |
| -- any composite type with Colored_Circle as a component type. |
| -- (i.e., the type extension is recognized as a tagged type for |
| -- the purpose of defining predefined equality for the composite type). |
| |
| end C452001_0; |
| |
| package body c452001_0 is |
| |
| function "=" (L, R : Circle) return Boolean is |
| begin |
| return L.Radius = R.Radius; -- circles are same size |
| end "="; |
| |
| function "=" (L, R : Colored_Circle) return Boolean is |
| begin |
| return Circle(L) = Circle(R); |
| end "="; |
| |
| end C452001_0; |
| |
| with C452001_0; |
| package C452001_1 is |
| |
| type Planet is tagged record |
| Name : String (1..15); |
| Representation : C452001_0.Colored_Circle; |
| end record; |
| |
| -- Type Planet will be used to check that predefined equality |
| -- for a tagged type with a tagged component incorporates |
| -- user-defined equality for the component type. |
| |
| type TC_Planet is new Planet with null record; |
| |
| -- A "copy" of Planet. Used to create a type extension. An "=" |
| -- operator will be defined for this type that should be |
| -- incorporated by the type extension. |
| |
| function "=" (Arg1, Arg2 : in TC_Planet) return Boolean; |
| |
| type Craters is array (1..3) of C452001_0.Colored_Circle; |
| |
| -- An array type (untagged) with tagged components |
| |
| type Moon is new TC_Planet |
| with record |
| Crater : Craters; |
| end record; |
| |
| -- A tagged record type. Extended component type is untagged, |
| -- but its predefined equality operator should incorporate |
| -- the user-defined operator of its tagged component type. |
| |
| end C452001_1; |
| |
| package body C452001_1 is |
| |
| function "=" (Arg1, Arg2 : in TC_Planet) return Boolean is |
| begin |
| return Arg1.Name = Arg2.Name; |
| end "="; |
| |
| end C452001_1; |
| |
| package C452001_2 is |
| |
| -- Untagged record types |
| -- Equality should not be incorporated |
| |
| type Spacecraft_Design is (Mariner, Pioneer, Viking, Voyager); |
| type Spacecraft is record |
| Design : Spacecraft_Design; |
| Operational : Boolean; |
| end record; |
| |
| function "=" (L : in Spacecraft; R : in Spacecraft) return Boolean; |
| |
| type Mission is record |
| Craft : Spacecraft; |
| Launch_Date : Natural; |
| end record; |
| |
| type Inventory is array (Positive range <>) of Spacecraft; |
| |
| end C452001_2; |
| |
| package body C452001_2 is |
| |
| function "=" (L : in Spacecraft; R : in Spacecraft) return Boolean is |
| begin |
| return L.Design = R.Design; |
| end "="; |
| |
| end C452001_2; |
| |
| package C452001_3 is |
| |
| type Tagged_Partial_Tagged_Full is tagged private; |
| procedure Change (Object : in out Tagged_Partial_Tagged_Full; |
| Value : in Boolean); |
| |
| type Untagged_Partial_Tagged_Full is private; |
| procedure Change (Object : in out Untagged_Partial_Tagged_Full; |
| Value : in Integer); |
| |
| type Untagged_Partial_Untagged_Full is private; |
| procedure Change (Object : in out Untagged_Partial_Untagged_Full; |
| Value : in Duration); |
| |
| private |
| |
| type Tagged_Partial_Tagged_Full is |
| tagged record |
| B : Boolean := True; |
| C : Character := ' '; |
| end record; |
| -- predefined equality checks that all components are equal |
| |
| function "=" (L, R : in Tagged_Partial_Tagged_Full) return Boolean; |
| -- primitive equality checks that records equate in component C only |
| |
| type Untagged_Partial_Tagged_Full is |
| tagged record |
| I : Integer := 0; |
| P : Positive := 1; |
| end record; |
| -- predefined equality checks that all components are equal |
| |
| function "=" (L, R : in Untagged_Partial_Tagged_Full) return Boolean; |
| -- primitive equality checks that records equate in component P only |
| |
| type Untagged_Partial_Untagged_Full is |
| record |
| D : Duration := 0.0; |
| S : String (1..12) := "Ada 9X rules"; |
| end record; |
| -- predefined equality checks that all components are equal |
| |
| function "=" (L, R : in Untagged_Partial_Untagged_Full) return Boolean; |
| -- primitive equality checks that records equate in component S only |
| |
| end C452001_3; |
| |
| with Report; |
| package body C452001_3 is |
| |
| procedure Change (Object : in out Tagged_Partial_Tagged_Full; |
| Value : in Boolean) is |
| begin |
| Object := (Report.Ident_Bool(Value), Object.C); |
| end Change; |
| |
| procedure Change (Object : in out Untagged_Partial_Tagged_Full; |
| Value : in Integer) is |
| begin |
| Object := (Report.Ident_Int(Value), Object.P); |
| end Change; |
| |
| procedure Change (Object : in out Untagged_Partial_Untagged_Full; |
| Value : in Duration) is |
| begin |
| Object := (Value, Report.Ident_Str(Object.S)); |
| end Change; |
| |
| function "=" (L, R : in Tagged_Partial_Tagged_Full) return Boolean is |
| begin |
| return L.C = R.C; |
| end "="; |
| |
| function "=" (L, R : in Untagged_Partial_Tagged_Full) return Boolean is |
| begin |
| return L.P = R.P; |
| end "="; |
| |
| function "=" (L, R : in Untagged_Partial_Untagged_Full) return Boolean is |
| begin |
| return R.S = L.S; |
| end "="; |
| |
| end C452001_3; |
| |
| |
| with C452001_0; |
| with C452001_1; |
| with C452001_2; |
| with C452001_3; |
| with Report; |
| procedure C452001 is |
| |
| Mars_Aphelion : C452001_1.Planet := |
| (Name => "Mars ", |
| Representation => (Center => (Report.Ident_Int(20), |
| Report.Ident_Int(0)), |
| Radius => Report.Ident_Int(4), |
| Color => C452001_0.Red)); |
| |
| Mars_Perihelion : C452001_1.Planet := |
| (Name => "Mars ", |
| Representation => (Center => (Report.Ident_Int(-20), |
| Report.Ident_Int(0)), |
| Radius => Report.Ident_Int(4), |
| Color => C452001_0.Red)); |
| |
| -- Mars_Perihelion = Mars_Aphelion if user-defined equality from |
| -- the tagged type Colored_Circle was incorporated into |
| -- predefined equality for the tagged type Planet. User-defined |
| -- equality for Colored_Circle checks only that the Radii are equal. |
| |
| Blue_Mars : C452001_1.Planet := |
| (Name => "Mars ", |
| Representation => (Center => (Report.Ident_Int(10), |
| Report.Ident_Int(10)), |
| Radius => Report.Ident_Int(4), |
| Color => C452001_0.Blue)); |
| |
| -- Blue_Mars should equal Mars_Perihelion, because Names and |
| -- Radii are equal (all other components are not). |
| |
| Green_Mars : C452001_1.Planet := |
| (Name => "Mars ", |
| Representation => (Center => (Report.Ident_Int(10), |
| Report.Ident_Int(10)), |
| Radius => Report.Ident_Int(4), |
| Color => C452001_0.Green)); |
| |
| -- Blue_Mars should equal Green_Mars. They differ only in the |
| -- Color component. All user-defined equality operations return |
| -- True, but records are not equal by predefined equality. |
| |
| -- Blue_Mars should equal Mars_Perihelion, because Names and |
| -- Radii are equal (all other components are not). |
| |
| Moon_Craters : C452001_1.Craters := |
| ((Center => (Report.Ident_Int(9), Report.Ident_Int(11)), |
| Radius => Report.Ident_Int(1), |
| Color => C452001_0.Black), |
| (Center => (Report.Ident_Int(10), Report.Ident_Int(10)), |
| Radius => Report.Ident_Int(1), |
| Color => C452001_0.Black), |
| (Center => (Report.Ident_Int(11), Report.Ident_Int(9)), |
| Radius => Report.Ident_Int(1), |
| Color => C452001_0.Black)); |
| |
| Alternate_Moon_Craters : C452001_1.Craters := |
| ((Center => (Report.Ident_Int(9), Report.Ident_Int(9)), |
| Radius => Report.Ident_Int(1), |
| Color => C452001_0.Yellow), |
| (Center => (Report.Ident_Int(10), Report.Ident_Int(10)), |
| Radius => Report.Ident_Int(1), |
| Color => C452001_0.Purple), |
| (Center => (Report.Ident_Int(11), Report.Ident_Int(11)), |
| Radius => Report.Ident_Int(1), |
| Color => C452001_0.Purple)); |
| |
| -- Moon_Craters = Alternate_Moon_Craters if user-defined equality from |
| -- the tagged type Colored_Circle was incorporated into |
| -- predefined equality for the untagged type Craters. User-defined |
| -- equality checks only that the Radii are equal. |
| |
| New_Moon : C452001_1.Moon := |
| (Name => "Moon ", |
| Representation => (Center => (Report.Ident_Int(10), |
| Report.Ident_Int(8)), |
| Radius => Report.Ident_Int(3), |
| Color => C452001_0.Black), |
| Crater => Moon_Craters); |
| |
| Full_Moon : C452001_1.Moon := |
| (Name => "Moon ", |
| Representation => (Center => (Report.Ident_Int(10), |
| Report.Ident_Int(8)), |
| Radius => Report.Ident_Int(3), |
| Color => C452001_0.Black), |
| Crater => Alternate_Moon_Craters); |
| |
| -- New_Moon = Full_Moon if user-defined equality from |
| -- the tagged type Colored_Circle was incorporated into |
| -- predefined equality for the untagged type Craters. This |
| -- equality test should call user-defined equality for type |
| -- TC_Planet (checks that Names are equal), then predefined |
| -- equality for Craters (ultimately calls user-defined equality |
| -- for type Circle, checking that Radii of craters are equal). |
| |
| Mars_Moon : C452001_1.Moon := |
| (Name => "Phobos ", |
| Representation => (Center => (Report.Ident_Int(10), |
| Report.Ident_Int(8)), |
| Radius => Report.Ident_Int(3), |
| Color => C452001_0.Black), |
| Crater => Alternate_Moon_Craters); |
| |
| -- Mars_Moon /= Full_Moon since the Names differ. |
| |
| Alternate_Moon_Craters_2 : C452001_1.Craters := |
| ((Center => (Report.Ident_Int(10), Report.Ident_Int(10)), |
| Radius => Report.Ident_Int(1), |
| Color => C452001_0.Red), |
| (Center => (Report.Ident_Int(9), Report.Ident_Int(9)), |
| Radius => Report.Ident_Int(1), |
| Color => C452001_0.Red), |
| (Center => (Report.Ident_Int(10), Report.Ident_Int(9)), |
| Radius => Report.Ident_Int(1), |
| Color => C452001_0.Red)); |
| |
| Harvest_Moon : C452001_1.Moon := |
| (Name => "Moon ", |
| Representation => (Center => (Report.Ident_Int(11), |
| Report.Ident_Int(7)), |
| Radius => Report.Ident_Int(4), |
| Color => C452001_0.Orange), |
| Crater => Alternate_Moon_Craters_2); |
| |
| -- Only the fields that are employed by the user-defined equality |
| -- operators are the same. Everything else differs. Equality should |
| -- still return True. |
| |
| Viking_1_Orbiter : C452001_2.Mission := |
| (Craft => (Design => C452001_2.Viking, |
| Operational => Report.Ident_Bool(False)), |
| Launch_Date => 1975); |
| |
| Viking_1_Lander : C452001_2.Mission := |
| (Craft => (Design => C452001_2.Viking, |
| Operational => Report.Ident_Bool(True)), |
| Launch_Date => 1975); |
| |
| -- Viking_1_Orbiter /= Viking_1_Lander if predefined equality |
| -- from the untagged type Spacecraft is used for equality |
| -- of matching components in type Mission. If user-defined |
| -- equality for type Spacecraft is incorporated, which it |
| -- should not be by 4.5.2(21), then Viking_1_Orbiter = Viking_1_Lander. |
| |
| Voyagers : C452001_2.Inventory (1..2):= |
| ((C452001_2.Voyager, Operational => Report.Ident_Bool(True)), |
| (C452001_2.Voyager, Operational => Report.Ident_Bool(False))); |
| |
| Jupiter_Craft : C452001_2.Inventory (1..2):= |
| ((C452001_2.Voyager, Operational => Report.Ident_Bool(True)), |
| (C452001_2.Voyager, Operational => Report.Ident_Bool(True))); |
| |
| -- Voyagers /= Jupiter_Craft if predefined equality |
| -- from the untagged type Spacecraft is used for equality |
| -- of matching components in type Inventory. If user-defined |
| -- equality for type Spacecraft is incorporated, which it |
| -- should not be by 4.5.2(21), then Voyagers = Jupiter_Craft. |
| |
| TPTF_1 : C452001_3.Tagged_Partial_Tagged_Full; |
| TPTF_2 : C452001_3.Tagged_Partial_Tagged_Full; |
| |
| -- With differing values for Boolean component, user-defined |
| -- (primitive) equality returns True, predefined equality |
| -- returns False. Since full type is tagged, primitive equality |
| -- should be used. |
| |
| UPTF_1 : C452001_3.Untagged_Partial_Tagged_Full; |
| UPTF_2 : C452001_3.Untagged_Partial_Tagged_Full; |
| |
| -- With differing values for Boolean component, user-defined |
| -- (primitive) equality returns True, predefined equality |
| -- returns False. Since full type is tagged, primitive equality |
| -- should be used. |
| |
| UPUF_1 : C452001_3.Untagged_Partial_Untagged_Full; |
| UPUF_2 : C452001_3.Untagged_Partial_Untagged_Full; |
| |
| -- With differing values for Duration component, user-defined |
| -- (primitive) equality returns True, predefined equality |
| -- returns False. Since full type is untagged, predefined equality |
| -- should be used. |
| |
| -- Use type clauses make "=" and "/=" operators directly visible |
| use type C452001_1.Planet; |
| use type C452001_1.Craters; |
| use type C452001_1.Moon; |
| use type C452001_2.Mission; |
| use type C452001_2.Inventory; |
| use type C452001_3.Tagged_Partial_Tagged_Full; |
| use type C452001_3.Untagged_Partial_Tagged_Full; |
| use type C452001_3.Untagged_Partial_Untagged_Full; |
| |
| begin |
| |
| Report.Test ("C452001", "Equality of private types and " & |
| "composite types with tagged components"); |
| |
| ------------------------------------------------------------------- |
| -- Tagged type with tagged component. |
| ------------------------------------------------------------------- |
| |
| if not (Mars_Aphelion = Mars_Perihelion) then |
| Report.Failed ("User-defined equality for tagged component " & |
| "was not incorporated into predefined equality " & |
| "for enclosing tagged record type"); |
| end if; |
| |
| if Mars_Aphelion /= Mars_Perihelion then |
| Report.Failed ("User-defined equality for tagged component " & |
| "was not incorporated into predefined inequality " & |
| "for enclosing tagged record type"); |
| end if; |
| |
| if not (Blue_Mars = Mars_Perihelion) then |
| Report.Failed ("Equality test for tagged record type " & |
| "incorporates record components " & |
| "other than those used by user-defined equality"); |
| end if; |
| |
| if Blue_Mars /= Mars_Perihelion then |
| Report.Failed ("Inequality test for tagged record type " & |
| "incorporates record components " & |
| "other than those used by user-defined equality"); |
| end if; |
| |
| if Blue_Mars /= Green_Mars then |
| Report.Failed ("Records are unequal even though they only differ " & |
| "in a component not used by user-defined equality"); |
| end if; |
| |
| if not (Blue_Mars = Green_Mars) then |
| Report.Failed ("Records are not equal even though they only differ " & |
| "in a component not used by user-defined equality"); |
| end if; |
| |
| ------------------------------------------------------------------- |
| -- Untagged (array) type with tagged component. |
| ------------------------------------------------------------------- |
| |
| if not (Moon_Craters = Alternate_Moon_Craters) then |
| Report.Failed ("User-defined equality for tagged component " & |
| "was not incorporated into predefined equality " & |
| "for enclosing array type"); |
| end if; |
| |
| if Moon_Craters /= Alternate_Moon_Craters then |
| Report.Failed ("User-defined equality for tagged component " & |
| "was not incorporated into predefined inequality " & |
| "for enclosing array type"); |
| end if; |
| |
| ------------------------------------------------------------------- |
| -- Tagged type with untagged composite component. Untagged |
| -- component itself has tagged components. |
| ------------------------------------------------------------------- |
| if not (New_Moon = Full_Moon) then |
| Report.Failed ("User-defined equality for tagged component " & |
| "was not incorporated into predefined equality " & |
| "for array component of tagged record type"); |
| end if; |
| |
| if New_Moon /= Full_Moon then |
| Report.Failed ("User-defined equality for tagged component " & |
| "was not incorporated into predefined inequality " & |
| "for array component of tagged record type"); |
| end if; |
| |
| if Mars_Moon = Full_Moon then |
| Report.Failed ("User-defined equality for tagged component " & |
| "was not incorporated into predefined equality " & |
| "for array component of tagged record type"); |
| end if; |
| |
| if not (Mars_Moon /= Full_Moon) then |
| Report.Failed ("User-defined equality for tagged component " & |
| "was not incorporated into predefined inequality " & |
| "for array component of tagged record type"); |
| end if; |
| |
| if not (Harvest_Moon = Full_Moon) then |
| Report.Failed ("Equality test for record with array of tagged " & |
| "components incorporates record components " & |
| "other than those used by user-defined equality"); |
| end if; |
| |
| if Harvest_Moon /= Full_Moon then |
| Report.Failed ("Inequality test for record with array of tagged " & |
| "components incorporates record components " & |
| "other than those used by user-defined equality"); |
| end if; |
| |
| ------------------------------------------------------------------- |
| -- Untagged types with no tagged components. |
| ------------------------------------------------------------------- |
| |
| -- Record type |
| |
| if Viking_1_Orbiter = Viking_1_Lander then |
| Report.Failed ("User-defined equality for untagged composite " & |
| "component was incorporated into predefined " & |
| "equality for " & |
| "untagged record type"); |
| end if; |
| |
| if not (Viking_1_Orbiter /= Viking_1_Lander) then |
| Report.Failed ("User-defined equality for untagged composite " & |
| "component was incorporated into predefined " & |
| "inequality for " & |
| "untagged record type"); |
| end if; |
| |
| -- Array type |
| |
| if Voyagers = Jupiter_Craft then |
| Report.Failed ("User-defined equality for untagged composite " & |
| "component was incorporated into predefined " & |
| "equality for " & |
| "array type"); |
| end if; |
| |
| if not (Voyagers /= Jupiter_Craft) then |
| Report.Failed ("User-defined equality for untagged composite " & |
| "component was incorporated into predefined " & |
| "inequality for " & |
| "array type"); |
| end if; |
| |
| ------------------------------------------------------------------- |
| -- Private types tests. |
| ------------------------------------------------------------------- |
| |
| -- Make objects differ from one another |
| |
| C452001_3.Change (TPTF_1, False); |
| C452001_3.Change (UPTF_1, 999); |
| C452001_3.Change (UPUF_1, 40.0); |
| |
| ------------------------------------------------------------------- |
| -- Partial type and full type are tagged. (Full type must be tagged |
| -- if partial type is tagged) |
| ------------------------------------------------------------------- |
| |
| if not (TPTF_1 = TPTF_2) then |
| Report.Failed ("Predefined equality for full type " & |
| "was used to determine equality of " & |
| "tagged private type " & |
| "instead of user-defined (primitive) equality"); |
| end if; |
| |
| if TPTF_1 /= TPTF_2 then |
| Report.Failed ("Predefined equality for full type " & |
| "was used to determine inequality of " & |
| "tagged private type " & |
| "instead of user-defined (primitive) equality"); |
| end if; |
| |
| ------------------------------------------------------------------- |
| -- Partial type untagged, full type tagged. |
| ------------------------------------------------------------------- |
| |
| if not (UPTF_1 = UPTF_2) then |
| Report.Failed ("Predefined equality for full type " & |
| "was used to determine equality of " & |
| "private type (untagged partial view, " & |
| "tagged full view) " & |
| "instead of user-defined (primitive) equality"); |
| end if; |
| |
| if UPTF_1 /= UPTF_2 then |
| Report.Failed ("Predefined equality for full type " & |
| "was used to determine inequality of " & |
| "private type (untagged partial view, " & |
| "tagged full view) " & |
| "instead of user-defined (primitive) equality"); |
| end if; |
| |
| ------------------------------------------------------------------- |
| -- Partial type and full type are both untagged. |
| ------------------------------------------------------------------- |
| |
| if UPUF_1 = UPUF_2 then |
| Report.Failed ("User-defined (primitive) equality for full type " & |
| "was used to determine equality of " & |
| "private type (untagged partial view, " & |
| "untagged full view) " & |
| "instead of predefined equality"); |
| end if; |
| |
| if not (UPUF_1 /= UPUF_2) then |
| Report.Failed ("User-defined (primitive) equality for full type " & |
| "was used to determine inequality of " & |
| "private type (untagged partial view, " & |
| "untagged full view) " & |
| "instead of predefined equality"); |
| end if; |
| |
| ------------------------------------------------------------------- |
| Report.Result; |
| |
| end C452001; |