Skip to content

Commit f19c0d4

Browse files
committed
Add elapsedTime() method to IStackTimer
1 parent 311410a commit f19c0d4

File tree

5 files changed

+22
-4
lines changed

5 files changed

+22
-4
lines changed

include/scratchcpp/istacktimer.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,9 @@ class LIBSCRATCHCPP_EXPORT IStackTimer
2828

2929
/*! Returns true if the timer has elapsed. */
3030
virtual bool elapsed() const = 0;
31+
32+
/*! Returns the elapsed time in seconds. */
33+
virtual double elapsedTime() const = 0;
3134
};
3235

3336
} // namespace libscratchcpp

src/engine/internal/stacktimer.cpp

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,3 +43,11 @@ bool StackTimer::elapsed() const
4343

4444
return std::chrono::duration_cast<std::chrono::milliseconds>(m_clock->currentSteadyTime() - m_startTime).count() >= m_timeLimit;
4545
}
46+
47+
double StackTimer::elapsedTime() const
48+
{
49+
if (m_stopped)
50+
return 0;
51+
52+
return std::chrono::duration_cast<std::chrono::milliseconds>(m_clock->currentSteadyTime() - m_startTime).count() / 1000.0;
53+
}

src/engine/internal/stacktimer.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ class StackTimer : public IStackTimer
2222

2323
bool stopped() const override;
2424
bool elapsed() const override;
25+
double elapsedTime() const override;
2526

2627
private:
2728
std::chrono::steady_clock::time_point m_startTime;

test/mocks/stacktimermock.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,4 +13,5 @@ class StackTimerMock : public IStackTimer
1313

1414
MOCK_METHOD(bool, stopped, (), (const, override));
1515
MOCK_METHOD(bool, elapsed, (), (const, override));
16+
MOCK_METHOD(double, elapsedTime, (), (const, override));
1617
};

test/timer/stacktimer_test.cpp

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,27 +20,32 @@ TEST(StackTimerTest, StartStopElapsed)
2020
EXPECT_CALL(clock, currentSteadyTime()).WillOnce(Return(time2));
2121
timer.start(0.5);
2222

23-
EXPECT_CALL(clock, currentSteadyTime()).WillOnce(Return(time2));
23+
EXPECT_CALL(clock, currentSteadyTime()).Times(2).WillRepeatedly(Return(time2));
2424
ASSERT_FALSE(timer.elapsed());
2525
ASSERT_FALSE(timer.stopped());
26+
ASSERT_EQ(timer.elapsedTime(), 0);
2627

2728
std::chrono::steady_clock::time_point time3(std::chrono::milliseconds(520));
28-
EXPECT_CALL(clock, currentSteadyTime()).WillOnce(Return(time3));
29+
EXPECT_CALL(clock, currentSteadyTime()).Times(2).WillRepeatedly(Return(time3));
2930
ASSERT_FALSE(timer.elapsed());
3031
ASSERT_FALSE(timer.stopped());
32+
ASSERT_EQ(timer.elapsedTime(), 0.447);
3133

3234
std::chrono::steady_clock::time_point time4(std::chrono::milliseconds(573));
33-
EXPECT_CALL(clock, currentSteadyTime()).WillOnce(Return(time4));
35+
EXPECT_CALL(clock, currentSteadyTime()).Times(2).WillRepeatedly(Return(time4));
3436
ASSERT_TRUE(timer.elapsed());
3537
ASSERT_FALSE(timer.stopped());
38+
ASSERT_EQ(timer.elapsedTime(), 0.5);
3639

3740
std::chrono::steady_clock::time_point time5(std::chrono::milliseconds(580));
38-
EXPECT_CALL(clock, currentSteadyTime()).WillOnce(Return(time5));
41+
EXPECT_CALL(clock, currentSteadyTime()).Times(2).WillRepeatedly(Return(time5));
3942
ASSERT_TRUE(timer.elapsed());
4043
ASSERT_FALSE(timer.stopped());
44+
ASSERT_EQ(timer.elapsedTime(), 0.507);
4145

4246
timer.stop();
4347
EXPECT_CALL(clock, currentSteadyTime).Times(0);
4448
ASSERT_FALSE(timer.elapsed());
4549
ASSERT_TRUE(timer.stopped());
50+
ASSERT_EQ(timer.elapsedTime(), 0);
4651
}

0 commit comments

Comments
 (0)