blob: 2575ce8b650289f152ec4f357f89d90ee868a755 [file] [log] [blame]
Jakub Czapigacc7acb82021-02-15 14:21:20 +01001/* SPDX-License-Identifier: GPL-2.0-only */
2
3#include <stdlib.h>
4#include <tests/test.h>
5#include <string.h>
6
7static const char test_data1[] =
Jakub Czapigac08b6a72022-01-10 13:36:47 +00008 "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
Jakub Czapigacc7acb82021-02-15 14:21:20 +01009static const size_t test_data1_sz = sizeof(test_data1);
10static const char test_data2[] = {
Jakub Czapigac08b6a72022-01-10 13:36:47 +000011 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d,
12 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b,
13 0x1c, 0x1d, 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29,
14 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,
15 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45,
16 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53,
17 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, 0x60, 0x61,
18 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f,
19 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d,
20 0x7e, 0x7f, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b,
21 0x8c, 0x8d, 0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99,
22 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7,
23 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5,
24 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, 0xc0, 0xc1, 0xc2, 0xc3,
25 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, 0xd0, 0xd1,
26 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf,
27 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed,
28 0xee, 0xef, 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb,
29 0xfc, 0xfd, 0xfe, 0xff};
Jakub Czapigacc7acb82021-02-15 14:21:20 +010030static const size_t test_data2_sz = sizeof(test_data2);
31
32static void test_memchr_existing_value(void **state)
33{
34 /* Test using character string */
35 void *v1 = memchr(test_data1, 'A', test_data1_sz);
Jakub Czapiga68220b52021-02-24 12:12:22 +010036 void *v2 = memchr(test_data1 + 26, 'A', test_data1_sz - 26);
Jakub Czapigacc7acb82021-02-15 14:21:20 +010037
38 assert_non_null(v1);
39 assert_non_null(v2);
40 assert_ptr_equal(v1, v2);
41 assert_ptr_equal(v1, &test_data1[26]);
42
43 /* Test using full byte range array */
44 v1 = memchr(test_data2, 0x33, test_data2_sz);
45 v2 = memchr(test_data2 + 0x15, 0x33, test_data2_sz - 0x15);
46
47 assert_non_null(v1);
48 assert_non_null(v2);
49 assert_ptr_equal(v1, v2);
50 assert_ptr_equal(v1, &test_data2[0x33]);
51}
52
53static void test_memchr_last_character_in_string(void **state)
54{
55 void *v1 = memchr(test_data1, '9', test_data1_sz);
Jakub Czapiga68220b52021-02-24 12:12:22 +010056 void *v2 = memchr(&test_data1[test_data1_sz - 2], '9', 2);
Jakub Czapigacc7acb82021-02-15 14:21:20 +010057 void *v3 = memchr(test_data2, 0xff, test_data2_sz);
Jakub Czapiga68220b52021-02-24 12:12:22 +010058 void *v4 = memchr(&test_data2[test_data2_sz - 1], 0xff, 1);
Jakub Czapigacc7acb82021-02-15 14:21:20 +010059
Jakub Czapiga68220b52021-02-24 12:12:22 +010060 assert_non_null(v1);
61 assert_non_null(v2);
Jakub Czapigacc7acb82021-02-15 14:21:20 +010062 assert_ptr_equal(v1, v2);
63 assert_ptr_equal(v1, &test_data1[test_data1_sz - 2]);
64
Jakub Czapiga68220b52021-02-24 12:12:22 +010065 assert_non_null(v3);
66 assert_non_null(v4);
Jakub Czapigacc7acb82021-02-15 14:21:20 +010067 assert_ptr_equal(v3, v4);
68 assert_ptr_equal(v3, &test_data2[test_data2_sz - 1]);
69}
70
71static void test_memchr_nonexistent_value(void **state)
72{
73 assert_null(memchr(test_data1, '@', test_data1_sz));
74}
75
76static void test_memchr_zero_size(void **state)
77{
78 assert_null(memchr(test_data2, 0x56, 0));
79}
80
81int main(void)
82{
83 const struct CMUnitTest tests[] = {
84 cmocka_unit_test(test_memchr_existing_value),
85 cmocka_unit_test(test_memchr_last_character_in_string),
86 cmocka_unit_test(test_memchr_nonexistent_value),
87 cmocka_unit_test(test_memchr_zero_size),
88 };
89
Jakub Czapiga7c6081e2021-08-25 16:27:35 +020090 return cb_run_group_tests(tests, NULL, NULL);
Jakub Czapigacc7acb82021-02-15 14:21:20 +010091}