1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586 |
- /*
- * Copyright 2018 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.
- */
- //#define LOG_NDEBUG 0
- #define LOG_TAG "audio_utils_string_tests"
- #include <audio_utils/string.h>
- #include <gtest/gtest.h>
- // fills the string buffer with a increasing ramp of values from start.
- template <size_t size>
- void fill(char (&s)[size], int start) {
- for (size_t i = 0; i < size - 1; ++i) {
- s[i] = start++;
- }
- s[size - 1] = 0;
- }
- // checks that the fill counts from start, as expected to actual chars,
- // whereupon the rest is expected to be zeroes.
- template <size_t size>
- void check(char (&s)[size], int start, size_t actual) {
- size_t lim = std::min(actual, size);
- size_t i = 0;
- if (lim > 0) {
- for (; i < lim - 1; ++i) {
- EXPECT_EQ(start, s[i]);
- ++start;
- }
- }
- for (; i < size; ++i) {
- EXPECT_EQ(0, s[i]);
- }
- }
- TEST(audio_utils_string, check_zero_fill) {
- // we use string arrays whose size is known by compiler, not vectors
- constexpr size_t STRING_SIZE = 50;
- union {
- char dst[STRING_SIZE];
- char dst_mirror[STRING_SIZE + 10]; // verifier that we don't overwrite
- };
- char over[sizeof(dst) + 5];
- char under[sizeof(dst) - 5];
- // fill with a value ramp
- constexpr int DST_START = 1;
- constexpr int OVER_START = 2;
- constexpr int UNDER_START = 3;
- fill(dst_mirror, DST_START);
- fill(over, OVER_START);
- fill(under, UNDER_START);
- // union should overlay dst and dst_mirror.
- dst[sizeof(dst) - 1] = 0;
- check(dst, DST_START, sizeof(dst));
- EXPECT_EQ(sizeof(dst) + DST_START, dst_mirror[sizeof(dst)]);
- // make sure we truncate when copying a larger string.
- audio_utils_strlcpy_zerofill(dst, over);
- check(dst, OVER_START, sizeof(dst));
- // check we didn't overwrite
- EXPECT_EQ(sizeof(dst) + DST_START, dst_mirror[sizeof(dst)]);
- // make sure we fill remaining buffer with zeros.
- audio_utils_strlcpy_zerofill(dst, under);
- check(dst, UNDER_START, sizeof(under));
- // check we didn't overwrite
- EXPECT_EQ(sizeof(dst) + DST_START, dst_mirror[sizeof(dst)]);
- }
|