| //===-- ProgressMeterTest.cpp -----------------------------------*- C++ -*-===// |
| // |
| // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. |
| // See https://llvm.org/LICENSE.txt for license information. |
| // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception |
| // |
| //===----------------------------------------------------------------------===// |
| |
| #include "ProgressMeter.h" |
| #include "gmock/gmock.h" |
| #include "gtest/gtest.h" |
| |
| namespace llvm { |
| namespace exegesis { |
| |
| namespace { |
| |
| struct PreprogrammedClock { |
| using duration = std::chrono::seconds; |
| using rep = duration::rep; |
| using period = duration::period; |
| using time_point = std::chrono::time_point<PreprogrammedClock, duration>; |
| |
| static constexpr bool is_steady = true; |
| |
| static time_point now() noexcept; |
| }; |
| |
| static int CurrentTimePoint = 0; |
| auto Pt(int i) { |
| return PreprogrammedClock::time_point(PreprogrammedClock::duration(i)); |
| } |
| static const std::array<const PreprogrammedClock::time_point, 10> TimePoints = { |
| Pt(0), Pt(5), Pt(6), Pt(20), Pt(20), |
| Pt(35), Pt(37), Pt(75), Pt(77), Pt(100)}; |
| |
| PreprogrammedClock::time_point PreprogrammedClock::now() noexcept { |
| time_point p = TimePoints[CurrentTimePoint]; |
| ++CurrentTimePoint; |
| return p; |
| } |
| |
| TEST(ProgressMeterTest, Integration) { |
| CurrentTimePoint = 0; |
| std::string TempString; |
| raw_string_ostream SS(TempString); |
| ProgressMeter<PreprogrammedClock> m(5, SS); |
| for (int i = 0; i != 5; ++i) |
| decltype(m)::ProgressMeterStep s(&m); |
| SS.flush(); |
| ASSERT_EQ("Processing... 20%, ETA 00:20\n" |
| "Processing... 40%, ETA 00:29\n" |
| "Processing... 60%, ETA 00:23\n" |
| "Processing... 80%, ETA 00:18\n" |
| "Processing... 100%, ETA 00:00\n", |
| TempString); |
| } |
| |
| } // namespace |
| } // namespace exegesis |
| } // namespace llvm |