operation AddQuestion is inputs: Question*, Test; outputs: Test; description: (* AddQuestion adds the given Question* to the given Test, which in turn produces an updated Test containing that Question. *); end AddQuestion; operation RemoveQuestion is inputs: ID*, Test; outputs: Test; description: (* RemoveQuestion removes the Question* with the matching given ID* from the given Test, which in turn produces an updated Test without a Question* matching the given ID*. *); end RemoveQuestion; operation EditQuestion is inputs: ID, Question, Test; outputs: Test; description: (* EditQuestion finds the Question on the given Test with an ID matching the given ID. This Question is replaced with the given updated or edited Question and put back in the Test, which is then returned. *); end EditQuestion; operation ReplaceQuestion is inputs: ID, Question, Test; outputs: Test; description: (* ReplaceQuestion replaces the Question with matching the given ID(which is contained in the given Test) with the given Question and puts it into the given Test. The result is a new Test with one removed Question and a new Question replacing it. *); end ReplaceQuestion;