/* * Copyright 2019 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ /* * Test Histogram */ #include #include #include using namespace android::audio_utils; static constexpr int32_t kBinWidth = 10; static constexpr int32_t kNumBins = 20; TEST(test_histogram, module_sinki16) { Histogram histogram(kNumBins, kBinWidth); ASSERT_EQ(kNumBins, histogram.getNumBinsInRange()); // Is it clear initially? for (int i = 0; i < kNumBins; i++) { ASSERT_EQ(0, histogram.getCount(i)); } ASSERT_EQ(0, histogram.getCountBelowRange()); ASSERT_EQ(0, histogram.getCountAboveRange()); ASSERT_EQ(0, histogram.getCount()); // Add some items. histogram.add(27); histogram.add(53); histogram.add(171); histogram.add(23); // Did they count correctly. ASSERT_EQ(2, histogram.getCount(2)); // For items 27 and 23 ASSERT_EQ(3, histogram.getLastItemNumber(2)); // Item 23 was the 0,1,2,3th item added. ASSERT_EQ(1, histogram.getCount(5)); // For item 53 ASSERT_EQ(1, histogram.getLastItemNumber(5)); // item 53 was the second item added. ASSERT_EQ(1, histogram.getCount(17)); // For item 171 ASSERT_EQ(4, histogram.getCount()); // A total of four items were added. // Add values out of range. histogram.add(-5); ASSERT_EQ(1, histogram.getCountBelowRange()); // -5 is below zero. ASSERT_EQ(0, histogram.getCountAboveRange()); ASSERT_EQ(5, histogram.getCount()); histogram.add(200); ASSERT_EQ(1, histogram.getCountBelowRange()); ASSERT_EQ(1, histogram.getCountAboveRange()); // 200 is above top bin ASSERT_EQ(6, histogram.getCount()); // Try to read values out of range. Should not crash. // Legal index range is 0 to numBins-1 histogram.add(-1); histogram.add(kNumBins); ASSERT_EQ(0, histogram.getCount(-1)); // edge ASSERT_EQ(0, histogram.getCount(kNumBins)); // edge ASSERT_EQ(0, histogram.getCount(-1234)); // extreme ASSERT_EQ(0, histogram.getCount(98765)); // extreme ASSERT_EQ(0, histogram.getLastItemNumber(-1)); ASSERT_EQ(0, histogram.getLastItemNumber(kNumBins)); // Clear all the counts. histogram.clear(); // Is it clear? for (int i = 0; i < kNumBins; i++) { ASSERT_EQ(0, histogram.getCount(i)); } ASSERT_EQ(0, histogram.getCountBelowRange()); ASSERT_EQ(0, histogram.getCountAboveRange()); ASSERT_EQ(0, histogram.getCount()); }