1 // Copyright 2018 The Fuchsia Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #include <stdint.h> 6 7 #include <cobalt-client/cpp/timer.h> 8 #include <lib/fzl/time.h> 9 #include <lib/zx/time.h> 10 #include <unittest/unittest.h> 11 12 namespace cobalt_client { 13 namespace internal { 14 namespace { 15 16 class FakeClock { 17 public: GetInstance()18 static FakeClock& GetInstance() { 19 static FakeClock clock; 20 return clock; 21 } 22 now()23 static zx::ticks now() { return GetInstance().current(); } 24 current() const25 zx::ticks current() const { return current_; } 26 set_current(uint32_t current)27 void set_current(uint32_t current) { current_ = zx::ticks(current); } 28 29 private: 30 zx::ticks current_ = zx::ticks(0); 31 }; 32 TestCollecting()33bool TestCollecting() { 34 BEGIN_TEST; 35 FakeClock::GetInstance().set_current(1); 36 TimerBase<FakeClock> timer(true); 37 FakeClock::GetInstance().set_current(4); 38 ASSERT_EQ(timer.End().to_nsecs(), fzl::TicksToNs(zx::ticks(3)).to_nsecs()); 39 END_TEST; 40 } 41 TestNotCollecting()42bool TestNotCollecting() { 43 BEGIN_TEST; 44 FakeClock::GetInstance().set_current(1); 45 TimerBase<FakeClock> timer(false); 46 FakeClock::GetInstance().set_current(4); 47 ASSERT_EQ(timer.End().to_nsecs(), fzl::TicksToNs(zx::ticks(0)).to_nsecs()); 48 END_TEST; 49 } 50 TestReset()51bool TestReset() { 52 BEGIN_TEST; 53 FakeClock::GetInstance().set_current(1); 54 TimerBase<FakeClock> timer(true); 55 FakeClock::GetInstance().set_current(4); 56 timer.Reset(); 57 FakeClock::GetInstance().set_current(8); 58 ASSERT_EQ(timer.End().to_nsecs(), fzl::TicksToNs(zx::ticks(4)).to_nsecs()); 59 END_TEST; 60 } 61 TestResetNotCollecting()62bool TestResetNotCollecting() { 63 BEGIN_TEST; 64 FakeClock::GetInstance().set_current(1); 65 TimerBase<FakeClock> timer(false); 66 FakeClock::GetInstance().set_current(4); 67 timer.Reset(); 68 FakeClock::GetInstance().set_current(8); 69 ASSERT_EQ(timer.End().to_nsecs(), fzl::TicksToNs(zx::ticks(0)).to_nsecs()); 70 END_TEST; 71 } 72 73 BEGIN_TEST_CASE(TimerTest) 74 RUN_TEST(TestCollecting) 75 RUN_TEST(TestNotCollecting) 76 RUN_TEST(TestReset) 77 RUN_TEST(TestResetNotCollecting) 78 END_TEST_CASE(TimerTest) 79 80 } // namespace 81 } // namespace internal 82 } // namespace cobalt_client 83