>-- This test aims at checking that subprograms get highlighted as
#^^ source.ada comment.line.ada
#  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ source.ada comment.line.ada
>-- entity.name.function.ada
#^^ source.ada comment.line.ada
#  ^^^^^^^^^^^^^^^^^^^^^^^^^ source.ada comment.line.ada
>package body Subprograms is
#^^^^^^^ source.ada keyword.other.ada
#       ^ source.ada
#        ^^^^ source.ada keyword.other.ada
#            ^ source.ada
#             ^^^^^^^^^^^ source.ada entity.name.label.ada
#                        ^ source.ada
#                         ^^ source.ada keyword.other.ada
>   function S1 return Boolean;
#^^^ source.ada
#   ^^^^^^^^ source.ada meta.declaration.subprogram.ada keyword.other.ada
#           ^ source.ada meta.declaration.subprogram.ada
#            ^^ source.ada meta.declaration.subprogram.ada entity.name.function.ada
#              ^ source.ada
#               ^^^^^^ source.ada keyword.other.ada
#                     ^ source.ada
#                      ^^^^^^^ source.ada entity.name.label.ada
#                             ^ source.ada punctuation.ada
>   procedure S2;
#^^^ source.ada
#   ^^^^^^^^^ source.ada meta.declaration.subprogram.ada keyword.other.ada
#            ^ source.ada meta.declaration.subprogram.ada
#             ^^ source.ada meta.declaration.subprogram.ada entity.name.function.ada
#               ^ source.ada punctuation.ada
>
>   -- With parameters
#^^^ source.ada
#   ^^ source.ada comment.line.ada
#     ^^^^^^^^^^^^^^^^ source.ada comment.line.ada
>   function S3 (Param1 : T1; Param2 : T2);
#^^^ source.ada
#   ^^^^^^^^ source.ada meta.declaration.subprogram.ada keyword.other.ada
#           ^ source.ada meta.declaration.subprogram.ada
#            ^^ source.ada meta.declaration.subprogram.ada entity.name.function.ada
#              ^^ source.ada
#                ^^^^^^ source.ada meta.declaration.object.ada variable.name.ada
#                      ^ source.ada meta.declaration.object.ada
#                       ^ source.ada meta.declaration.object.ada punctuation.ada
#                        ^ source.ada
#                         ^^ source.ada entity.name.label.ada
#                           ^ source.ada punctuation.ada
#                            ^ source.ada
#                             ^^^^^^ source.ada meta.declaration.object.ada variable.name.ada
#                                   ^ source.ada meta.declaration.object.ada
#                                    ^ source.ada meta.declaration.object.ada punctuation.ada
#                                     ^ source.ada
#                                      ^^ source.ada entity.name.label.ada
#                                        ^ source.ada
#                                         ^ source.ada punctuation.ada
>   procedure S4 (Param1 : T1; Param2 : T2);
#^^^ source.ada
#   ^^^^^^^^^ source.ada meta.declaration.subprogram.ada keyword.other.ada
#            ^ source.ada meta.declaration.subprogram.ada
#             ^^ source.ada meta.declaration.subprogram.ada entity.name.function.ada
#               ^^ source.ada
#                 ^^^^^^ source.ada meta.declaration.object.ada variable.name.ada
#                       ^ source.ada meta.declaration.object.ada
#                        ^ source.ada meta.declaration.object.ada punctuation.ada
#                         ^ source.ada
#                          ^^ source.ada entity.name.label.ada
#                            ^ source.ada punctuation.ada
#                             ^ source.ada
#                              ^^^^^^ source.ada meta.declaration.object.ada variable.name.ada
#                                    ^ source.ada meta.declaration.object.ada
#                                     ^ source.ada meta.declaration.object.ada punctuation.ada
#                                      ^ source.ada
#                                       ^^ source.ada entity.name.label.ada
#                                         ^ source.ada
#                                          ^ source.ada punctuation.ada
>
>   -- Multiple parameters of same type
#^^^ source.ada
#   ^^ source.ada comment.line.ada
#     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ source.ada comment.line.ada
>   function S5 (Param1, Param2 : T1; Param3 : T2);
#^^^ source.ada
#   ^^^^^^^^ source.ada meta.declaration.subprogram.ada keyword.other.ada
#           ^ source.ada meta.declaration.subprogram.ada
#            ^^ source.ada meta.declaration.subprogram.ada entity.name.function.ada
#              ^^ source.ada
#                ^^^^^^ source.ada meta.declaration.object.ada variable.name.ada
#                      ^ source.ada meta.declaration.object.ada punctuation.ada
#                       ^ source.ada meta.declaration.object.ada
#                        ^^^^^^ source.ada meta.declaration.object.ada variable.name.ada
#                              ^ source.ada meta.declaration.object.ada
#                               ^ source.ada meta.declaration.object.ada punctuation.ada
#                                ^ source.ada
#                                 ^^ source.ada entity.name.label.ada
#                                   ^ source.ada punctuation.ada
#                                    ^ source.ada
#                                     ^^^^^^ source.ada meta.declaration.object.ada variable.name.ada
#                                           ^ source.ada meta.declaration.object.ada
#                                            ^ source.ada meta.declaration.object.ada punctuation.ada
#                                             ^ source.ada
#                                              ^^ source.ada entity.name.label.ada
#                                                ^ source.ada
#                                                 ^ source.ada punctuation.ada
>
>   -- Operator declarations
#^^^ source.ada
#   ^^ source.ada comment.line.ada
#     ^^^^^^^^^^^^^^^^^^^^^^ source.ada comment.line.ada
>   function "+" (Param1, Param2 : T1) return T1;
#^^^ source.ada
#   ^^^^^^^^ source.ada meta.declaration.subprogram.ada keyword.other.ada
#           ^ source.ada meta.declaration.subprogram.ada
#            ^ source.ada meta.declaration.subprogram.ada string.quoted.double.ada
#             ^^ source.ada meta.declaration.subprogram.ada string.quoted.double.ada
#               ^^ source.ada
#                 ^^^^^^ source.ada meta.declaration.object.ada variable.name.ada
#                       ^ source.ada meta.declaration.object.ada punctuation.ada
#                        ^ source.ada meta.declaration.object.ada
#                         ^^^^^^ source.ada meta.declaration.object.ada variable.name.ada
#                               ^ source.ada meta.declaration.object.ada
#                                ^ source.ada meta.declaration.object.ada punctuation.ada
#                                 ^ source.ada
#                                  ^^ source.ada entity.name.label.ada
#                                    ^^ source.ada
#                                      ^^^^^^ source.ada keyword.other.ada
#                                            ^ source.ada
#                                             ^^ source.ada entity.name.label.ada
#                                               ^ source.ada punctuation.ada
>   function "xor" (Param1, Param2 : T1) return T1;
#^^^ source.ada
#   ^^^^^^^^ source.ada meta.declaration.subprogram.ada keyword.other.ada
#           ^ source.ada meta.declaration.subprogram.ada
#            ^ source.ada meta.declaration.subprogram.ada string.quoted.double.ada
#             ^^^^ source.ada meta.declaration.subprogram.ada string.quoted.double.ada
#                 ^^ source.ada
#                   ^^^^^^ source.ada meta.declaration.object.ada variable.name.ada
#                         ^ source.ada meta.declaration.object.ada punctuation.ada
#                          ^ source.ada meta.declaration.object.ada
#                           ^^^^^^ source.ada meta.declaration.object.ada variable.name.ada
#                                 ^ source.ada meta.declaration.object.ada
#                                  ^ source.ada meta.declaration.object.ada punctuation.ada
#                                   ^ source.ada
#                                    ^^ source.ada entity.name.label.ada
#                                      ^^ source.ada
#                                        ^^^^^^ source.ada keyword.other.ada
#                                              ^ source.ada
#                                               ^^ source.ada entity.name.label.ada
#                                                 ^ source.ada punctuation.ada
>
>end Subprograms;
#^^^ source.ada keyword.other.ada
#   ^ source.ada
#    ^^^^^^^^^^^ source.ada entity.name.label.ada
#               ^ source.ada punctuation.ada
>