Browse Source

Write basic tests for FPS Counter.

Sam Jaffe 6 years ago
parent
commit
1eb1b3f568

+ 4 - 0
engine/engine.xcodeproj/project.pbxproj

@@ -21,6 +21,7 @@
 		CD8064F422D2284500B9B4E4 /* data in Resources */ = {isa = PBXBuildFile; fileRef = CD8064F322D2284500B9B4E4 /* data */; };
 		CD8064F622D228D300B9B4E4 /* text_engine_test.cxx in Sources */ = {isa = PBXBuildFile; fileRef = CD8064F522D228D300B9B4E4 /* text_engine_test.cxx */; };
 		CD8064F722D22BF500B9B4E4 /* libgameutils.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = CD7E87782295FAB400D877FE /* libgameutils.dylib */; };
+		CD8064F922D2984400B9B4E4 /* fps_counter_test.cxx in Sources */ = {isa = PBXBuildFile; fileRef = CD8064F822D2984400B9B4E4 /* fps_counter_test.cxx */; };
 		CDB1F8C81D7A312B00700C6B /* game_dispatch.cpp in Sources */ = {isa = PBXBuildFile; fileRef = CDB1F8C61D7A312B00700C6B /* game_dispatch.cpp */; settings = {COMPILER_FLAGS = "-fvisibility=default"; }; };
 		CDB1F8CC1D7A319A00700C6B /* scene.cpp in Sources */ = {isa = PBXBuildFile; fileRef = CDB1F8CA1D7A319A00700C6B /* scene.cpp */; settings = {COMPILER_FLAGS = "-fvisibility=default"; }; };
 		CDB1F8D21D7A32A300700C6B /* events.cpp in Sources */ = {isa = PBXBuildFile; fileRef = CDB1F8D01D7A32A300700C6B /* events.cpp */; settings = {COMPILER_FLAGS = "-fvisibility=default"; }; };
@@ -87,6 +88,7 @@
 		CD7E87782295FAB400D877FE /* libgameutils.dylib */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.dylib"; path = libgameutils.dylib; sourceTree = BUILT_PRODUCTS_DIR; };
 		CD8064F322D2284500B9B4E4 /* data */ = {isa = PBXFileReference; lastKnownFileType = folder; path = data; sourceTree = "<group>"; };
 		CD8064F522D228D300B9B4E4 /* text_engine_test.cxx */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = text_engine_test.cxx; sourceTree = "<group>"; };
+		CD8064F822D2984400B9B4E4 /* fps_counter_test.cxx */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = fps_counter_test.cxx; sourceTree = "<group>"; };
 		CDA34D8422515C99008036A7 /* game */ = {isa = PBXFileReference; lastKnownFileType = folder; name = game; path = include/game; sourceTree = "<group>"; };
 		CDB1F8AE1D7A30CD00700C6B /* libengine.dylib */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.dylib"; includeInIndex = 0; path = libengine.dylib; sourceTree = BUILT_PRODUCTS_DIR; };
 		CDB1F8C61D7A312B00700C6B /* game_dispatch.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = game_dispatch.cpp; sourceTree = "<group>"; };
@@ -160,6 +162,7 @@
 				CDED9C4C22A4112200AE5CE5 /* mock_renderer.h */,
 				CDED9C5022A4114F00AE5CE5 /* serial_test.cxx */,
 				CD8064F522D228D300B9B4E4 /* text_engine_test.cxx */,
+				CD8064F822D2984400B9B4E4 /* fps_counter_test.cxx */,
 			);
 			path = test;
 			sourceTree = "<group>";
@@ -360,6 +363,7 @@
 			isa = PBXSourcesBuildPhase;
 			buildActionMask = 2147483647;
 			files = (
+				CD8064F922D2984400B9B4E4 /* fps_counter_test.cxx in Sources */,
 				CD8064F622D228D300B9B4E4 /* text_engine_test.cxx in Sources */,
 				CDED9C5122A4114F00AE5CE5 /* serial_test.cxx in Sources */,
 			);

+ 73 - 0
engine/test/fps_counter_test.cxx

@@ -0,0 +1,73 @@
+//
+//  fps_counter_test.cxx
+//  engine-test
+//
+//  Created by Sam Jaffe on 7/7/19.
+//  Copyright © 2019 Sam Jaffe. All rights reserved.
+//
+
+#include <gmock/gmock.h>
+
+#include "game/engine/fps_counter.hpp"
+#include "game/engine/text_engine.hpp"
+
+#include "mock_renderer.h"
+
+#ifdef __APPLE__
+namespace env { namespace detail {
+  extern void bundle(std::string const &);
+}}
+#endif
+
+using testing::IsEmpty;
+using testing::SizeIs;
+
+struct FpsCounterTest : testing::Test {
+  void SetUp() override;
+  void TearDown() override;
+  std::shared_ptr<graphics::manager> manager;
+  std::shared_ptr<engine::text_engine> engine;
+};
+
+void FpsCounterTest::SetUp() {
+#ifdef __APPLE__
+  env::detail::bundle("leumasjaffe.engine-test");
+#endif
+  manager.reset(new stub_manager_impl);
+  engine.reset(new engine::text_engine("font", manager));
+}
+
+void FpsCounterTest::TearDown() {
+  engine.reset();
+  manager.reset();
+}
+
+TEST_F(FpsCounterTest, CanConstructCtrNoExcept) {
+  EXPECT_NO_THROW(engine::fps_counter(engine, 5));
+}
+
+TEST_F(FpsCounterTest, CanFrameNoExcept) {
+  engine::fps_counter counter(engine, 5);
+  env::clock::duration ms_100{100000000LL};
+  EXPECT_NO_THROW(counter.set_frame_step(ms_100));
+}
+
+// TODO (sjaffe): Give ability to specifiy change_after_ in ctor?
+TEST_F(FpsCounterTest, NoGlyphsUntilCrossesChangeThresh) {
+  engine::fps_counter counter(engine, 5);
+  env::clock::duration ms_100{100000000LL};
+  EXPECT_THAT(counter.glyphs(), IsEmpty());
+  counter.set_frame_step(ms_100);
+  EXPECT_THAT(counter.glyphs(), IsEmpty());
+}
+
+// TODO (sjaffe): Test different precisions
+// TODO (sjaffe): Test <10 fps and >=100 fps
+TEST_F(FpsCounterTest, ProducesEnoughDigitsForPrecision) {
+  engine::fps_counter counter(engine, 5);
+  env::clock::duration ms_100{100000000LL};
+  for (int i = 0; i < 10; ++i) {
+    counter.set_frame_step(ms_100);
+  }
+  EXPECT_THAT(counter.glyphs(), SizeIs(8));
+}

+ 1 - 1
engine/test/text_engine_test.cxx

@@ -57,7 +57,7 @@ struct CreateTextTest : TextEngineTest {
 
 void CreateTextTest::SetUp() {
   TextEngineTest::SetUp();
-  engine = std::make_unique<engine::text_engine>("font", manager);
+  engine.reset(new engine::text_engine("font", manager));
 }
 
 void CreateTextTest::TearDown() {