1// Copyright (c) 2012 The Chromium OS Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#include <stdio.h>
6#include <gtest/gtest.h>
7
8extern "C" {
9#include "cras_volume_curve.h"
10}
11
12namespace {
13
14TEST(VolumeCurve, DefaultCurve) {
15  struct cras_volume_curve *curve;
16  curve = cras_volume_curve_create_default();
17  ASSERT_NE(static_cast<struct cras_volume_curve *>(NULL), curve);
18  EXPECT_EQ(0 - 50 * 50, curve->get_dBFS(curve, 50));
19  EXPECT_EQ(0, curve->get_dBFS(curve, 100));
20  EXPECT_EQ(0 - 100 * 50, curve->get_dBFS(curve, 0));
21  EXPECT_EQ(0 - 25 * 50, curve->get_dBFS(curve, 75));
22  cras_volume_curve_destroy(curve);
23}
24
25TEST(VolumeCurve, SteppedCurve) {
26  struct cras_volume_curve *curve;
27  curve = cras_volume_curve_create_simple_step(-600, 75);
28  ASSERT_NE(static_cast<struct cras_volume_curve *>(NULL), curve);
29  EXPECT_EQ(-600 - 50 * 75, curve->get_dBFS(curve, 50));
30  EXPECT_EQ(-600, curve->get_dBFS(curve, 100));
31  EXPECT_EQ(-600 - 100 * 75, curve->get_dBFS(curve, 0));
32  EXPECT_EQ(-600 - 25 * 75, curve->get_dBFS(curve, 75));
33  cras_volume_curve_destroy(curve);
34}
35
36TEST(VolumeCurve, ExplicitCurve) {
37  struct cras_volume_curve *curve;
38  long dB_vals[101];
39
40  for (unsigned int i = 0; i < 101; i++)
41	  dB_vals[i] = i * 2 + -400;
42  curve = cras_volume_curve_create_explicit(dB_vals);
43  ASSERT_NE(static_cast<struct cras_volume_curve *>(NULL), curve);
44  for (unsigned int i = 0; i < 101; i++)
45	  EXPECT_EQ(i * 2 - 400, curve->get_dBFS(curve, i));
46  cras_volume_curve_destroy(curve);
47}
48
49}  //  namespace
50
51int main(int argc, char **argv) {
52  ::testing::InitGoogleTest(&argc, argv);
53  return RUN_ALL_TESTS();
54}
55