diff --git a/wpilibc/wpilibC++IntegrationTests/src/FakeEncoderTest.cpp b/wpilibc/wpilibC++IntegrationTests/src/FakeEncoderTest.cpp new file mode 100644 index 0000000000..ac1b70456c --- /dev/null +++ b/wpilibc/wpilibC++IntegrationTests/src/FakeEncoderTest.cpp @@ -0,0 +1,59 @@ +/*----------------------------------------------------------------------------*/ +/* Copyright (c) FIRST 2014. All Rights Reserved. */ +/* Open Source Software - may be modified and shared by FRC teams. The code */ +/* must be accompanied by the FIRST BSD license file in the root directory of */ +/* the project. */ +/*----------------------------------------------------------------------------*/ + +#include "WPILib.h" +#include "gtest/gtest.h" +#include "TestBench.h" + +static const double kDelayTime = 0.001; + +class FakeEncoderTest : public testing::Test { +protected: + Encoder *m_encoder; + DigitalOutput *m_outputA; + DigitalOutput *m_outputB; + + virtual void SetUp() { + m_outputA = new DigitalOutput(TestBench::kLoop2OutputChannel); + m_outputB = new DigitalOutput(TestBench::kLoop1OutputChannel); + m_encoder = new Encoder(TestBench::kLoop1InputChannel, TestBench::kLoop2InputChannel); + } + + virtual void TearDown() { + delete m_encoder; + delete m_outputA; + delete m_outputB; + } +}; + +/** + * Test the encoder by reseting it to 0 and reading the value. + */ +TEST_F(FakeEncoderTest, TestDefaultState) { + EXPECT_FLOAT_EQ(0.0f, m_encoder->Get()) + << "The encoder did not start at 0."; +} + +/** + * Test the encoder by setting the digital outputs and reading the value. + */ +TEST_F(FakeEncoderTest, TestCountUp) { + //Sets the outputs such that the encoder moves in the positive direction + for(int i = 0; i < 100; i++) { + m_outputA->Set(true); + Wait(kDelayTime); + m_outputB->Set(true); + Wait(kDelayTime); + m_outputA->Set(false); + Wait(kDelayTime); + m_outputB->Set(false); + Wait(kDelayTime); + } + + EXPECT_FLOAT_EQ(100.0f, m_encoder->Get()) + << "Encoder did not count to 100."; +}