blob: 8d92ac3e170455fff3dccfae9ed6e193be319618 [file] [log] [blame]
// Copyright 2019 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "src/media/audio/audio_core/versioned_timeline_function.h"
#include <gtest/gtest.h>
namespace media::audio {
namespace {
TEST(VersionedTimelineFunctionTest, UpdateIncrementsGeneration) {
TimelineFunction function1 = TimelineFunction(1, 1, 1, 1);
TimelineFunction function2 = TimelineFunction(1, 2, 1, 1);
VersionedTimelineFunction under_test(function1);
auto [_, initial_generation] = under_test.get();
// Update with the same function, should not increment generation.
under_test.Update(function1);
{
auto [_, gen] = under_test.get();
EXPECT_EQ(gen, initial_generation);
}
// Update function, increment generation.
under_test.Update(function2);
{
auto [_, gen] = under_test.get();
EXPECT_GT(gen, initial_generation);
}
}
TEST(DerivedTimelineFunctionTest, UpdateIncrementsGeneration) {
TimelineFunction function1 = TimelineFunction(1, 1, 1, 1);
auto base = fbl::MakeRefCounted<VersionedTimelineFunction>(function1);
TimelineFunction function2 = TimelineFunction(1, 2, 1, 1);
auto under_test = fbl::MakeRefCounted<DerivedTimelineFunction>(base, function2);
auto [f, generation] = under_test->get();
ASSERT_EQ(f, TimelineFunction::Compose(function2, function1));
// Update with the same function, should not increment generation.
base->Update(function1);
under_test->Update(function2);
{
auto [_, gen] = under_test->get();
EXPECT_EQ(gen, generation);
}
// Update base function, increment generation.
base->Update(function2);
{
auto [_, gen] = under_test->get();
ASSERT_GT(gen, generation);
generation = gen;
}
// Update derived function, increment generation.
under_test->Update(function1);
{
auto [_, gen] = under_test->get();
EXPECT_GT(gen, generation);
}
}
} // namespace
} // namespace media::audio