1 #ifndef OT_TIMER_TEST_HPP_
2 #define OT_TIMER_TEST_HPP_
3 
4 #include <ot/liberty/celllib.hpp>
5 
6 namespace ot {
7 
8 // Forward declaration
9 class Pin;
10 class Arc;
11 
12 // ------------------------------------------------------------------------------------------------
13 
14 // Class: Test
15 class Test {
16 
17   friend class Timer;
18   friend class Endpoint;
19 
20   friend struct Path;
21 
22   public:
23 
24     Test(Arc&);
25 
26     std::optional<float> rat(Split, Tran) const;
27     std::optional<float> constraint(Split, Tran) const;
28     std::optional<float> slack(Split, Tran) const;
29     std::optional<float> raw_slack(Split, Tran) const;
30     std::optional<float> cppr_credit(Split, Tran) const;
31 
32     const Pin& constrained_pin() const;
33     const Pin& related_pin() const;
34     const Arc& arc() const;
35 
36   private:
37 
38     Arc& _arc;
39 
40     std::optional<std::list<Test>::iterator> _satellite;
41     std::optional<std::list<Test*>::iterator> _pin_satellite;
42 
43     TimingData<std::optional<float>, MAX_SPLIT, MAX_TRAN> _rat;
44     TimingData<std::optional<float>, MAX_SPLIT, MAX_TRAN> _cppr_credit;
45     TimingData<std::optional<float>, MAX_SPLIT, MAX_TRAN> _constraint;
46     TimingData<std::optional<float>, MAX_SPLIT, MAX_TRAN> _related_at;
47 
48     void _reset();
49     void _fprop_rat(float);
50 
51     Pin& _constrained_pin();
52     Pin& _related_pin();
53 };
54 
55 
56 
57 };  // end of namespace ot. -----------------------------------------------------------------------
58 
59 
60 #endif
61 
62 
63