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

with Instrument;
use Instrument;

procedure Tpitd2 is

    task Head is
        entry Give;
    end Head;
    task Link1 is
        entry Give;
    end Link1;
    task Idle1 is
        entry Init;
        entry Never;
    end Idle1;
    task Idle2 is
        entry Init;
        entry Never;              -- included in test version
    end Idle2;
    task Idle3 is
        entry Init;
        entry Never;              -- included in test version
    end Idle3;
    task Idle4 is
        entry Init;
        entry Never;              -- included in test version
    end Idle4;
    task Idle5 is
        entry Init;
        entry Never;              -- included in test version
    end Idle5;
    task Idle11 is
        entry Init;
        entry Never;              -- included in test version
    end Idle11;
    task Idle12 is
        entry Init;
        entry Never;              -- included in test version
    end Idle12;
    task Idle13 is
        entry Init;
        entry Never;              -- included in test version
    end Idle13;
    task Idle14 is
        entry Init;
        entry Never;              -- included in test version
    end Idle14;
    task Idle15 is
        entry Init;
        entry Never;              -- included in test version
    end Idle15;
    task Idle21 is
        entry Init;
        entry Never;              -- included in test version
    end Idle21;
    task Idle22 is
        entry Init;
        entry Never;              -- included in test version
    end Idle22;
    task Idle23 is
        entry Init;
        entry Never;              -- included in test version
    end Idle23;
    task Idle24 is
        entry Init;
        entry Never;              -- included in test version
    end Idle24;
    task Idle25 is
        entry Init;
        entry Never;              -- included in test version
    end Idle25;
    task Idle211 is
        entry Init;
        entry Never;              -- included in test version
    end Idle211;
    task Idle212 is
        entry Init;
        entry Never;              -- included in test version
    end Idle212;
    task Idle213 is
        entry Init;
        entry Never;              -- included in test version
    end Idle213;
    task Idle214 is
        entry Init;
        entry Never;              -- included in test version
    end Idle214;
    task Idle215 is
        entry Init;
        entry Never;              -- included in test version
    end Idle215;
    task body Head is
    begin
        Start ("TPITD2", "Task Performance w/20 Idle Tasks (test)");
        Idle1.Init;
        Idle2.Init;
        Idle3.Init;
        Idle4.Init;
        Idle5.Init;
        Idle11.Init;
        Idle12.Init;
        Idle13.Init;
        Idle14.Init;
        Idle15.Init;
        Idle21.Init;
        Idle22.Init;
        Idle23.Init;
        Idle24.Init;
        Idle25.Init;
        Idle211.Init;
        Idle212.Init;
        Idle213.Init;
        Idle214.Init;
        Idle215.Init;

        for I in 1 .. 1000 loop
            Link1.Give;
            accept Give do
                null;
            end Give;
        end loop;

        Stop;
        abort Link1, Idle1, Idle2, Idle3, Idle4, Idle5, Idle11, Idle12,
              Idle13, Idle14, Idle15, Idle21, Idle22, Idle23, Idle24,
              Idle25, Idle211, Idle212, Idle213, Idle214, Idle215;
    end Head;
    task body Link1 is
    begin
        loop
            accept Give do
                null;
            end Give;
            Head.Give;
        end loop;
    end Link1;
    task body Idle1 is
    begin
        accept Init do
            null;
        end Init;
        accept Never do
            null;
        end Never;    -- inc in test ver
    end Idle1;
    task body Idle2 is
    begin
        accept Init do
            null;
        end Init;
        accept Never do
            null;
        end Never;    -- inc in test ver
    end Idle2;
    task body Idle3 is
    begin
        accept Init do
            null;
        end Init;
        accept Never do
            null;
        end Never;    -- inc in test ver
    end Idle3;
    task body Idle4 is
    begin
        accept Init do
            null;
        end Init;
        accept Never do
            null;
        end Never;    -- inc in test ver
    end Idle4;
    task body Idle5 is
    begin
        accept Init do
            null;
        end Init;
        accept Never do
            null;
        end Never;    -- inc in test ver
    end Idle5;
    task body Idle11 is
    begin
        accept Init do
            null;
        end Init;
        accept Never do
            null;
        end Never;    -- inc in test ver
    end Idle11;
    task body Idle12 is
    begin
        accept Init do
            null;
        end Init;
        accept Never do
            null;
        end Never;    -- inc in test ver
    end Idle12;
    task body Idle13 is
    begin
        accept Init do
            null;
        end Init;
        accept Never do
            null;
        end Never;    -- inc in test ver
    end Idle13;
    task body Idle14 is
    begin
        accept Init do
            null;
        end Init;
        accept Never do
            null;
        end Never;    -- inc in test ver
    end Idle14;
    task body Idle15 is
    begin
        accept Init do
            null;
        end Init;
        accept Never do
            null;
        end Never;    -- inc in test ver
    end Idle15;
    task body Idle21 is
    begin
        accept Init do
            null;
        end Init;
        accept Never do
            null;
        end Never;    -- inc in test ver
    end Idle21;
    task body Idle22 is
    begin
        accept Init do
            null;
        end Init;
        accept Never do
            null;
        end Never;    -- inc in test ver
    end Idle22;
    task body Idle23 is
    begin
        accept Init do
            null;
        end Init;
        accept Never do
            null;
        end Never;    -- inc in test ver
    end Idle23;
    task body Idle24 is
    begin
        accept Init do
            null;
        end Init;
        accept Never do
            null;
        end Never;    -- inc in test ver
    end Idle24;
    task body Idle25 is
    begin
        accept Init do
            null;
        end Init;
        accept Never do
            null;
        end Never;    -- inc in test ver
    end Idle25;
    task body Idle211 is
    begin
        accept Init do
            null;
        end Init;
        accept Never do
            null;
        end Never;    -- inc in test ver
    end Idle211;
    task body Idle212 is
    begin
        accept Init do
            null;
        end Init;
        accept Never do
            null;
        end Never;    -- inc in test ver
    end Idle212;
    task body Idle213 is
    begin
        accept Init do
            null;
        end Init;
        accept Never do
            null;
        end Never;    -- inc in test ver
    end Idle213;
    task body Idle214 is
    begin
        accept Init do
            null;
        end Init;
        accept Never do
            null;
        end Never;    -- inc in test ver
    end Idle214;
    task body Idle215 is
    begin
        accept Init do
            null;
        end Init;
        accept Never do
            null;
        end Never;    -- inc in test ver
    end Idle215;
begin
    null;
end Tpitd2;