-- ada tasking tester
-- task head is the controller
-- tasks link are the chain of tasks

with Instrument;
use Instrument;

procedure Tpota2 is

    task Head;
    task Link1 is
        entry Give1;
        entry Give2;
        entry Give3;
        entry Give4;
        entry Give5;
        entry Give6;
        entry Give7;
        entry Give8;
        entry Give9;
        entry Give10;
        entry Give11;
        entry Give12;
        entry Give13;
        entry Give14;
        entry Give15;
        entry Give16;
        entry Give17;
        entry Give18;
        entry Give19;
        entry Give20;
        entry Give21;
        entry Give22;
        entry Give23;
        entry Give24;
        entry Give25;
        entry Give26;
        entry Give27;
        entry Give28;
        entry Give29;
        entry Give30;
        entry Give31;
    end Link1;
    task body Head is
    begin
        Start ("TPOTA2", "Task Perf., Order Test (test)");
        for I in 1 .. 100 loop
            Link1.Give1;
            Link1.Give2;
            Link1.Give3;
            Link1.Give4;
            Link1.Give5;
            Link1.Give6;
            Link1.Give7;
            Link1.Give8;
            Link1.Give9;
            Link1.Give10;
            Link1.Give11;
            Link1.Give12;
            Link1.Give13;
            Link1.Give14;
            Link1.Give15;
            Link1.Give16;
            Link1.Give17;
            Link1.Give18;
            Link1.Give19;
            Link1.Give20;
            Link1.Give21;
            Link1.Give22;
            Link1.Give23;
            Link1.Give24;
            Link1.Give25;
            Link1.Give26;
            Link1.Give27;
            Link1.Give28;
            Link1.Give29;
            Link1.Give30;
            Link1.Give31;
        end loop;
        Stop;
        abort Link1;
    end Head;
    task body Link1 is
    begin
        loop
            select
                accept Give1 do
                    null;
                end Give1;
            or
                accept Give2 do
                    null;
                end Give2;
            or
                accept Give3 do
                    null;
                end Give3;
            or
                accept Give4 do
                    null;
                end Give4;
            or
                accept Give5 do
                    null;
                end Give5;
            or
                accept Give6 do
                    null;
                end Give6;
            or
                accept Give7 do
                    null;
                end Give7;
            or
                accept Give8 do
                    null;
                end Give8;
            or
                accept Give9 do
                    null;
                end Give9;
            or
                accept Give10 do
                    null;
                end Give10;
            or
                accept Give11 do
                    null;
                end Give11;
            or
                accept Give12 do
                    null;
                end Give12;
            or
                accept Give13 do
                    null;
                end Give13;
            or
                accept Give14 do
                    null;
                end Give14;
            or
                accept Give15 do
                    null;
                end Give15;
            or
                accept Give16 do
                    null;
                end Give16;
            or
                accept Give17 do
                    null;
                end Give17;
            or
                accept Give18 do
                    null;
                end Give18;
            or
                accept Give19 do
                    null;
                end Give19;
            or
                accept Give20 do
                    null;
                end Give20;
            or
                accept Give21 do
                    null;
                end Give21;
            or
                accept Give22 do
                    null;
                end Give22;
            or
                accept Give23 do
                    null;
                end Give23;
            or
                accept Give24 do
                    null;
                end Give24;
            or
                accept Give25 do
                    null;
                end Give25;
            or
                accept Give26 do
                    null;
                end Give26;
            or
                accept Give27 do
                    null;
                end Give27;
            or
                accept Give28 do
                    null;
                end Give28;
            or
                accept Give29 do
                    null;
                end Give29;
            or
                accept Give30 do
                    null;
                end Give30;
            or
                accept Give31 do
                    null;
                end Give31;
            end select;
        end loop;
    end Link1;
begin
    null;
end Tpota2;