170d6201e47271fe06c920b26cbf781c67fa3d4d8Dylan Reid// Copyright (c) 2012 The Chromium OS Authors. All rights reserved.
270d6201e47271fe06c920b26cbf781c67fa3d4d8Dylan Reid// Use of this source code is governed by a BSD-style license that can be
370d6201e47271fe06c920b26cbf781c67fa3d4d8Dylan Reid// found in the LICENSE file.
470d6201e47271fe06c920b26cbf781c67fa3d4d8Dylan Reid
570d6201e47271fe06c920b26cbf781c67fa3d4d8Dylan Reid#include <stdio.h>
670d6201e47271fe06c920b26cbf781c67fa3d4d8Dylan Reid#include <gtest/gtest.h>
770d6201e47271fe06c920b26cbf781c67fa3d4d8Dylan Reid
870d6201e47271fe06c920b26cbf781c67fa3d4d8Dylan Reidextern "C" {
970d6201e47271fe06c920b26cbf781c67fa3d4d8Dylan Reid#include "cras_volume_curve.h"
1070d6201e47271fe06c920b26cbf781c67fa3d4d8Dylan Reid}
1170d6201e47271fe06c920b26cbf781c67fa3d4d8Dylan Reid
1270d6201e47271fe06c920b26cbf781c67fa3d4d8Dylan Reidnamespace {
1370d6201e47271fe06c920b26cbf781c67fa3d4d8Dylan Reid
1470d6201e47271fe06c920b26cbf781c67fa3d4d8Dylan ReidTEST(VolumeCurve, DefaultCurve) {
1578957c7652b9c0061b74b8eedadf83b6e8f8bb88Dylan Reid  struct cras_volume_curve *curve;
1678957c7652b9c0061b74b8eedadf83b6e8f8bb88Dylan Reid  curve = cras_volume_curve_create_default();
1778957c7652b9c0061b74b8eedadf83b6e8f8bb88Dylan Reid  ASSERT_NE(static_cast<struct cras_volume_curve *>(NULL), curve);
18527df3b2645a5dc48ffa616e3c1500ba585fbca1Dylan Reid  EXPECT_EQ(0 - 50 * 50, curve->get_dBFS(curve, 50));
1978957c7652b9c0061b74b8eedadf83b6e8f8bb88Dylan Reid  EXPECT_EQ(0, curve->get_dBFS(curve, 100));
20527df3b2645a5dc48ffa616e3c1500ba585fbca1Dylan Reid  EXPECT_EQ(0 - 100 * 50, curve->get_dBFS(curve, 0));
21527df3b2645a5dc48ffa616e3c1500ba585fbca1Dylan Reid  EXPECT_EQ(0 - 25 * 50, curve->get_dBFS(curve, 75));
229ea33930817a59cd1ec72cfb3540611f7069a618Dylan Reid  cras_volume_curve_destroy(curve);
239ea33930817a59cd1ec72cfb3540611f7069a618Dylan Reid}
249ea33930817a59cd1ec72cfb3540611f7069a618Dylan Reid
259ea33930817a59cd1ec72cfb3540611f7069a618Dylan ReidTEST(VolumeCurve, SteppedCurve) {
269ea33930817a59cd1ec72cfb3540611f7069a618Dylan Reid  struct cras_volume_curve *curve;
279ea33930817a59cd1ec72cfb3540611f7069a618Dylan Reid  curve = cras_volume_curve_create_simple_step(-600, 75);
289ea33930817a59cd1ec72cfb3540611f7069a618Dylan Reid  ASSERT_NE(static_cast<struct cras_volume_curve *>(NULL), curve);
299ea33930817a59cd1ec72cfb3540611f7069a618Dylan Reid  EXPECT_EQ(-600 - 50 * 75, curve->get_dBFS(curve, 50));
309ea33930817a59cd1ec72cfb3540611f7069a618Dylan Reid  EXPECT_EQ(-600, curve->get_dBFS(curve, 100));
319ea33930817a59cd1ec72cfb3540611f7069a618Dylan Reid  EXPECT_EQ(-600 - 100 * 75, curve->get_dBFS(curve, 0));
329ea33930817a59cd1ec72cfb3540611f7069a618Dylan Reid  EXPECT_EQ(-600 - 25 * 75, curve->get_dBFS(curve, 75));
339ea33930817a59cd1ec72cfb3540611f7069a618Dylan Reid  cras_volume_curve_destroy(curve);
3470d6201e47271fe06c920b26cbf781c67fa3d4d8Dylan Reid}
3570d6201e47271fe06c920b26cbf781c67fa3d4d8Dylan Reid
3614f8c2e948cc896d033a9a2597a646bb9110d28eDylan ReidTEST(VolumeCurve, ExplicitCurve) {
3714f8c2e948cc896d033a9a2597a646bb9110d28eDylan Reid  struct cras_volume_curve *curve;
3814f8c2e948cc896d033a9a2597a646bb9110d28eDylan Reid  long dB_vals[101];
3914f8c2e948cc896d033a9a2597a646bb9110d28eDylan Reid
4014f8c2e948cc896d033a9a2597a646bb9110d28eDylan Reid  for (unsigned int i = 0; i < 101; i++)
4114f8c2e948cc896d033a9a2597a646bb9110d28eDylan Reid	  dB_vals[i] = i * 2 + -400;
4214f8c2e948cc896d033a9a2597a646bb9110d28eDylan Reid  curve = cras_volume_curve_create_explicit(dB_vals);
4314f8c2e948cc896d033a9a2597a646bb9110d28eDylan Reid  ASSERT_NE(static_cast<struct cras_volume_curve *>(NULL), curve);
4414f8c2e948cc896d033a9a2597a646bb9110d28eDylan Reid  for (unsigned int i = 0; i < 101; i++)
4514f8c2e948cc896d033a9a2597a646bb9110d28eDylan Reid	  EXPECT_EQ(i * 2 - 400, curve->get_dBFS(curve, i));
4614f8c2e948cc896d033a9a2597a646bb9110d28eDylan Reid  cras_volume_curve_destroy(curve);
4714f8c2e948cc896d033a9a2597a646bb9110d28eDylan Reid}
4814f8c2e948cc896d033a9a2597a646bb9110d28eDylan Reid
4970d6201e47271fe06c920b26cbf781c67fa3d4d8Dylan Reid}  //  namespace
5070d6201e47271fe06c920b26cbf781c67fa3d4d8Dylan Reid
5170d6201e47271fe06c920b26cbf781c67fa3d4d8Dylan Reidint main(int argc, char **argv) {
5270d6201e47271fe06c920b26cbf781c67fa3d4d8Dylan Reid  ::testing::InitGoogleTest(&argc, argv);
5370d6201e47271fe06c920b26cbf781c67fa3d4d8Dylan Reid  return RUN_ALL_TESTS();
5470d6201e47271fe06c920b26cbf781c67fa3d4d8Dylan Reid}
55