如何激活Finalize的多个调用?

时间:2011-01-19 21:19:56

标签: ada finalize

在最近的AdaCore Gem中有一条声明

Finalize的实现稍微复杂一些:Ada参考手册表明Finalize过程应该始终是幂等的。 Ada编译器可以在同一对象上多次调用Finalize,特别是在发生异常时。

我需要测试一个私人控制类型,

   type T is private;
private
   type T is new Ada.Finalization.Controlled with ...

我可以更改源以使类型明显受控

   type T is new Ada.Finalization.Controlled with private;

然后只需致电Finalize (My_T);(甚至是My_T.Finalize?);但是,如果没有对被测软件进行这些更改,我有什么方法可以导致多次最终确定?

1 个答案:

答案 0 :(得分:3)

出于测试目的,我使用子包。它允许测试私有部分。 假设您的包裹是:

package A is
   type T is private;
private
   type T is new Ada.Finalization.Controlled with ...
end A;

我会测试类似的东西:

package body A.Test is
   procedure Test_Finalize is
       My_T : T;
   begin
       My_T.Finalize;
   end Test_Finalize;
end A.Test;