1 #include "test/mockedenginebackendtest.h"
2 #include "track/beatgrid.h"
3 #include "util/memory.h"
4 
5 class BeatsTranslateTest : public MockedEngineBackendTest {
6 };
7 
TEST_F(BeatsTranslateTest,SimpleTranslateMatch)8 TEST_F(BeatsTranslateTest, SimpleTranslateMatch) {
9     // Set up BeatGrids for decks 1 and 2.
10     const double bpm = 60.0;
11     const double firstBeat = 0.0;
12     auto grid1 = mixxx::BeatGrid::makeBeatGrid(
13             m_pTrack1->getSampleRate(), QString(), bpm, firstBeat);
14     m_pTrack1->trySetBeats(grid1);
15     ASSERT_DOUBLE_EQ(firstBeat, grid1->findClosestBeat(0));
16 
17     auto grid2 = mixxx::BeatGrid::makeBeatGrid(
18             m_pTrack2->getSampleRate(), QString(), bpm, firstBeat);
19     m_pTrack2->trySetBeats(grid2);
20     ASSERT_DOUBLE_EQ(firstBeat, grid2->findClosestBeat(0));
21 
22     // Seek deck 1 forward a bit.
23     const double delta = 2222.0;
24     m_pChannel1->getEngineBuffer()->slotControlSeekAbs(delta);
25     ProcessBuffer();
26     EXPECT_TRUE(m_pChannel1->getEngineBuffer()->getVisualPlayPos() > 0);
27 
28     // Make both decks playing.
29     ControlObject::getControl(m_sGroup1, "play")->set(1.0);
30     ControlObject::getControl(m_sGroup2, "play")->set(1.0);
31     ProcessBuffer();
32     // Manually set the "bpm" control... I would like to figure out why this
33     // doesn't get set naturally, but this will do for now.
34     auto pBpm1 = std::make_unique<ControlProxy>(m_sGroup1, "bpm");
35     auto pBpm2 = std::make_unique<ControlProxy>(m_sGroup1, "bpm");
36     pBpm1->set(bpm);
37     pBpm2->set(bpm);
38     ProcessBuffer();
39 
40     // Push the button on deck 2.
41     auto pTranslateMatchAlignment = std::make_unique<ControlProxy>(
42         m_sGroup2, "beats_translate_match_alignment");
43     pTranslateMatchAlignment->set(1.0);
44     ProcessBuffer();
45 
46     // Deck 1 is +delta away from its closest beat (which is at 0).
47     // Deck 2 was left at 0. We translated grid 2 so that it is also +delta
48     // away from its closest beat, so that beat should be at -delta.
49     mixxx::BeatsPointer beats = m_pTrack2->getBeats();
50     ASSERT_DOUBLE_EQ(-delta, beats->findClosestBeat(0));
51 }
52