fps_counter_test.cxx 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. //
  2. // fps_counter_test.cxx
  3. // engine-test
  4. //
  5. // Created by Sam Jaffe on 7/7/19.
  6. // Copyright © 2019 Sam Jaffe. All rights reserved.
  7. //
  8. #include <gmock/gmock.h>
  9. #include "game/engine/fps_counter.hpp"
  10. #include "game/engine/text_engine.hpp"
  11. #include "mock_renderer.h"
  12. #ifdef __APPLE__
  13. namespace env { namespace detail {
  14. extern void bundle(std::string const &);
  15. }}
  16. #endif
  17. using testing::IsEmpty;
  18. using testing::SizeIs;
  19. struct FpsCounterTest : testing::Test {
  20. void SetUp() override;
  21. void TearDown() override;
  22. std::shared_ptr<graphics::manager> manager;
  23. std::shared_ptr<engine::text_engine> engine;
  24. };
  25. void FpsCounterTest::SetUp() {
  26. #ifdef __APPLE__
  27. env::detail::bundle("leumasjaffe.engine-test");
  28. #endif
  29. manager.reset(new stub_manager_impl);
  30. engine.reset(new engine::text_engine("font", manager));
  31. }
  32. void FpsCounterTest::TearDown() {
  33. engine.reset();
  34. manager.reset();
  35. }
  36. TEST_F(FpsCounterTest, CanConstructCtrNoExcept) {
  37. EXPECT_NO_THROW(engine::fps_counter(engine, 5));
  38. }
  39. TEST_F(FpsCounterTest, CanFrameNoExcept) {
  40. engine::fps_counter counter(engine, 5);
  41. env::clock::duration ms_100{100000000LL};
  42. EXPECT_NO_THROW(counter.set_frame_step(ms_100));
  43. }
  44. // TODO (sjaffe): Give ability to specifiy change_after_ in ctor?
  45. TEST_F(FpsCounterTest, NoGlyphsUntilCrossesChangeThresh) {
  46. engine::fps_counter counter(engine, 5);
  47. env::clock::duration ms_100{100000000LL};
  48. EXPECT_THAT(counter.glyphs(), IsEmpty());
  49. counter.set_frame_step(ms_100);
  50. EXPECT_THAT(counter.glyphs(), IsEmpty());
  51. }
  52. // TODO (sjaffe): Test different precisions
  53. // TODO (sjaffe): Test <10 fps and >=100 fps
  54. TEST_F(FpsCounterTest, ProducesEnoughDigitsForPrecision) {
  55. engine::fps_counter counter(engine, 5);
  56. env::clock::duration ms_100{100000000LL};
  57. for (int i = 0; i < 10; ++i) {
  58. counter.set_frame_step(ms_100);
  59. }
  60. EXPECT_THAT(counter.glyphs(), SizeIs(8));
  61. }