1e572f469de5dca1078a79d3d80e5b04f96ae7505Phil Burk/* 2e572f469de5dca1078a79d3d80e5b04f96ae7505Phil Burk * Copyright (C) 2017 The Android Open Source Project 3e572f469de5dca1078a79d3d80e5b04f96ae7505Phil Burk * 4e572f469de5dca1078a79d3d80e5b04f96ae7505Phil Burk * Licensed under the Apache License, Version 2.0 (the "License"); 5e572f469de5dca1078a79d3d80e5b04f96ae7505Phil Burk * you may not use this file except in compliance with the License. 6e572f469de5dca1078a79d3d80e5b04f96ae7505Phil Burk * You may obtain a copy of the License at 7e572f469de5dca1078a79d3d80e5b04f96ae7505Phil Burk * 8e572f469de5dca1078a79d3d80e5b04f96ae7505Phil Burk * http://www.apache.org/licenses/LICENSE-2.0 9e572f469de5dca1078a79d3d80e5b04f96ae7505Phil Burk * 10e572f469de5dca1078a79d3d80e5b04f96ae7505Phil Burk * Unless required by applicable law or agreed to in writing, software 11e572f469de5dca1078a79d3d80e5b04f96ae7505Phil Burk * distributed under the License is distributed on an "AS IS" BASIS, 12e572f469de5dca1078a79d3d80e5b04f96ae7505Phil Burk * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13e572f469de5dca1078a79d3d80e5b04f96ae7505Phil Burk * See the License for the specific language governing permissions and 14e572f469de5dca1078a79d3d80e5b04f96ae7505Phil Burk * limitations under the License. 15e572f469de5dca1078a79d3d80e5b04f96ae7505Phil Burk */ 16e572f469de5dca1078a79d3d80e5b04f96ae7505Phil Burk 17e572f469de5dca1078a79d3d80e5b04f96ae7505Phil Burk#include <iostream> 18e572f469de5dca1078a79d3d80e5b04f96ae7505Phil Burk 19e572f469de5dca1078a79d3d80e5b04f96ae7505Phil Burk#include <gtest/gtest.h> 20e572f469de5dca1078a79d3d80e5b04f96ae7505Phil Burk 21e572f469de5dca1078a79d3d80e5b04f96ae7505Phil Burk#include "utility/AAudioUtilities.h" 22e572f469de5dca1078a79d3d80e5b04f96ae7505Phil Burk#include "utility/LinearRamp.h" 23e572f469de5dca1078a79d3d80e5b04f96ae7505Phil Burk 24e572f469de5dca1078a79d3d80e5b04f96ae7505Phil Burk 25e572f469de5dca1078a79d3d80e5b04f96ae7505Phil BurkTEST(test_linear_ramp, linear_ramp_segments) { 26e572f469de5dca1078a79d3d80e5b04f96ae7505Phil Burk LinearRamp ramp; 27e572f469de5dca1078a79d3d80e5b04f96ae7505Phil Burk const float source[4] = {1.0f, 1.0f, 1.0f, 1.0f }; 28e572f469de5dca1078a79d3d80e5b04f96ae7505Phil Burk float destination[4] = {1.0f, 1.0f, 1.0f, 1.0f }; 29e572f469de5dca1078a79d3d80e5b04f96ae7505Phil Burk 30e572f469de5dca1078a79d3d80e5b04f96ae7505Phil Burk float levelFrom = -1.0f; 31e572f469de5dca1078a79d3d80e5b04f96ae7505Phil Burk float levelTo = -1.0f; 32e572f469de5dca1078a79d3d80e5b04f96ae7505Phil Burk ramp.setLengthInFrames(8); 33e572f469de5dca1078a79d3d80e5b04f96ae7505Phil Burk ramp.setTarget(8.0f); 34e572f469de5dca1078a79d3d80e5b04f96ae7505Phil Burk 35e572f469de5dca1078a79d3d80e5b04f96ae7505Phil Burk ASSERT_EQ(8, ramp.getLengthInFrames()); 36e572f469de5dca1078a79d3d80e5b04f96ae7505Phil Burk 37e572f469de5dca1078a79d3d80e5b04f96ae7505Phil Burk bool ramping = ramp.nextSegment(4, &levelFrom, &levelTo); 38e572f469de5dca1078a79d3d80e5b04f96ae7505Phil Burk ASSERT_EQ(1, ramping); 39e572f469de5dca1078a79d3d80e5b04f96ae7505Phil Burk ASSERT_EQ(0.0f, levelFrom); 40e572f469de5dca1078a79d3d80e5b04f96ae7505Phil Burk ASSERT_EQ(4.0f, levelTo); 41e572f469de5dca1078a79d3d80e5b04f96ae7505Phil Burk 42e572f469de5dca1078a79d3d80e5b04f96ae7505Phil Burk AAudio_linearRamp(source, destination, 4, 1, levelFrom, levelTo); 43e572f469de5dca1078a79d3d80e5b04f96ae7505Phil Burk ASSERT_EQ(0.0f, destination[0]); 44e572f469de5dca1078a79d3d80e5b04f96ae7505Phil Burk ASSERT_EQ(1.0f, destination[1]); 45e572f469de5dca1078a79d3d80e5b04f96ae7505Phil Burk ASSERT_EQ(2.0f, destination[2]); 46e572f469de5dca1078a79d3d80e5b04f96ae7505Phil Burk ASSERT_EQ(3.0f, destination[3]); 47e572f469de5dca1078a79d3d80e5b04f96ae7505Phil Burk 48e572f469de5dca1078a79d3d80e5b04f96ae7505Phil Burk ramping = ramp.nextSegment(4, &levelFrom, &levelTo); 49e572f469de5dca1078a79d3d80e5b04f96ae7505Phil Burk ASSERT_EQ(1, ramping); 50e572f469de5dca1078a79d3d80e5b04f96ae7505Phil Burk ASSERT_EQ(4.0f, levelFrom); 51e572f469de5dca1078a79d3d80e5b04f96ae7505Phil Burk ASSERT_EQ(8.0f, levelTo); 52e572f469de5dca1078a79d3d80e5b04f96ae7505Phil Burk 53e572f469de5dca1078a79d3d80e5b04f96ae7505Phil Burk AAudio_linearRamp(source, destination, 4, 1, levelFrom, levelTo); 54e572f469de5dca1078a79d3d80e5b04f96ae7505Phil Burk ASSERT_EQ(4.0f, destination[0]); 55e572f469de5dca1078a79d3d80e5b04f96ae7505Phil Burk ASSERT_EQ(5.0f, destination[1]); 56e572f469de5dca1078a79d3d80e5b04f96ae7505Phil Burk ASSERT_EQ(6.0f, destination[2]); 57e572f469de5dca1078a79d3d80e5b04f96ae7505Phil Burk ASSERT_EQ(7.0f, destination[3]); 58e572f469de5dca1078a79d3d80e5b04f96ae7505Phil Burk 59e572f469de5dca1078a79d3d80e5b04f96ae7505Phil Burk ramping = ramp.nextSegment(4, &levelFrom, &levelTo); 60e572f469de5dca1078a79d3d80e5b04f96ae7505Phil Burk ASSERT_EQ(0, ramping); 61e572f469de5dca1078a79d3d80e5b04f96ae7505Phil Burk ASSERT_EQ(8.0f, levelFrom); 62e572f469de5dca1078a79d3d80e5b04f96ae7505Phil Burk ASSERT_EQ(8.0f, levelTo); 63e572f469de5dca1078a79d3d80e5b04f96ae7505Phil Burk 64e572f469de5dca1078a79d3d80e5b04f96ae7505Phil Burk AAudio_linearRamp(source, destination, 4, 1, levelFrom, levelTo); 65e572f469de5dca1078a79d3d80e5b04f96ae7505Phil Burk ASSERT_EQ(8.0f, destination[0]); 66e572f469de5dca1078a79d3d80e5b04f96ae7505Phil Burk ASSERT_EQ(8.0f, destination[1]); 67e572f469de5dca1078a79d3d80e5b04f96ae7505Phil Burk ASSERT_EQ(8.0f, destination[2]); 68e572f469de5dca1078a79d3d80e5b04f96ae7505Phil Burk ASSERT_EQ(8.0f, destination[3]); 69e572f469de5dca1078a79d3d80e5b04f96ae7505Phil Burk 70e572f469de5dca1078a79d3d80e5b04f96ae7505Phil Burk}; 71e572f469de5dca1078a79d3d80e5b04f96ae7505Phil Burk 72e572f469de5dca1078a79d3d80e5b04f96ae7505Phil Burk 73e572f469de5dca1078a79d3d80e5b04f96ae7505Phil BurkTEST(test_linear_ramp, linear_ramp_forced) { 74e572f469de5dca1078a79d3d80e5b04f96ae7505Phil Burk LinearRamp ramp; 75e572f469de5dca1078a79d3d80e5b04f96ae7505Phil Burk const float source[4] = {1.0f, 1.0f, 1.0f, 1.0f }; 76e572f469de5dca1078a79d3d80e5b04f96ae7505Phil Burk float destination[4] = {1.0f, 1.0f, 1.0f, 1.0f }; 77e572f469de5dca1078a79d3d80e5b04f96ae7505Phil Burk 78e572f469de5dca1078a79d3d80e5b04f96ae7505Phil Burk float levelFrom = -1.0f; 79e572f469de5dca1078a79d3d80e5b04f96ae7505Phil Burk float levelTo = -1.0f; 80e572f469de5dca1078a79d3d80e5b04f96ae7505Phil Burk ramp.setLengthInFrames(4); 81e572f469de5dca1078a79d3d80e5b04f96ae7505Phil Burk ramp.setTarget(8.0f); 82e572f469de5dca1078a79d3d80e5b04f96ae7505Phil Burk ramp.forceCurrent(4.0f); 83e572f469de5dca1078a79d3d80e5b04f96ae7505Phil Burk ASSERT_EQ(4.0f, ramp.getCurrent()); 84e572f469de5dca1078a79d3d80e5b04f96ae7505Phil Burk 85e572f469de5dca1078a79d3d80e5b04f96ae7505Phil Burk bool ramping = ramp.nextSegment(4, &levelFrom, &levelTo); 86e572f469de5dca1078a79d3d80e5b04f96ae7505Phil Burk ASSERT_EQ(1, ramping); 87e572f469de5dca1078a79d3d80e5b04f96ae7505Phil Burk ASSERT_EQ(4.0f, levelFrom); 88e572f469de5dca1078a79d3d80e5b04f96ae7505Phil Burk ASSERT_EQ(8.0f, levelTo); 89e572f469de5dca1078a79d3d80e5b04f96ae7505Phil Burk 90e572f469de5dca1078a79d3d80e5b04f96ae7505Phil Burk AAudio_linearRamp(source, destination, 4, 1, levelFrom, levelTo); 91e572f469de5dca1078a79d3d80e5b04f96ae7505Phil Burk ASSERT_EQ(4.0f, destination[0]); 92e572f469de5dca1078a79d3d80e5b04f96ae7505Phil Burk ASSERT_EQ(5.0f, destination[1]); 93e572f469de5dca1078a79d3d80e5b04f96ae7505Phil Burk ASSERT_EQ(6.0f, destination[2]); 94e572f469de5dca1078a79d3d80e5b04f96ae7505Phil Burk ASSERT_EQ(7.0f, destination[3]); 95e572f469de5dca1078a79d3d80e5b04f96ae7505Phil Burk 96e572f469de5dca1078a79d3d80e5b04f96ae7505Phil Burk ramping = ramp.nextSegment(4, &levelFrom, &levelTo); 97e572f469de5dca1078a79d3d80e5b04f96ae7505Phil Burk ASSERT_EQ(0, ramping); 98e572f469de5dca1078a79d3d80e5b04f96ae7505Phil Burk ASSERT_EQ(8.0f, levelFrom); 99e572f469de5dca1078a79d3d80e5b04f96ae7505Phil Burk ASSERT_EQ(8.0f, levelTo); 100e572f469de5dca1078a79d3d80e5b04f96ae7505Phil Burk 101e572f469de5dca1078a79d3d80e5b04f96ae7505Phil Burk AAudio_linearRamp(source, destination, 4, 1, levelFrom, levelTo); 102e572f469de5dca1078a79d3d80e5b04f96ae7505Phil Burk ASSERT_EQ(8.0f, destination[0]); 103e572f469de5dca1078a79d3d80e5b04f96ae7505Phil Burk ASSERT_EQ(8.0f, destination[1]); 104e572f469de5dca1078a79d3d80e5b04f96ae7505Phil Burk ASSERT_EQ(8.0f, destination[2]); 105e572f469de5dca1078a79d3d80e5b04f96ae7505Phil Burk ASSERT_EQ(8.0f, destination[3]); 106e572f469de5dca1078a79d3d80e5b04f96ae7505Phil Burk 107e572f469de5dca1078a79d3d80e5b04f96ae7505Phil Burk}; 108e572f469de5dca1078a79d3d80e5b04f96ae7505Phil Burk 109