Home | History | Annotate | Line # | Download | only in unit
      1  1.1  christos #include "test/jemalloc_test.h"
      2  1.1  christos 
      3  1.1  christos #include "jemalloc/internal/conf.h"
      4  1.1  christos 
      5  1.1  christos TEST_BEGIN(test_conf_handle_bool_true) {
      6  1.1  christos 	bool result = false;
      7  1.1  christos 	bool err = conf_handle_bool("true", sizeof("true") - 1, &result);
      8  1.1  christos 	expect_false(err, "conf_handle_bool should succeed for \"true\"");
      9  1.1  christos 	expect_true(result, "result should be true");
     10  1.1  christos }
     11  1.1  christos TEST_END
     12  1.1  christos 
     13  1.1  christos TEST_BEGIN(test_conf_handle_bool_false) {
     14  1.1  christos 	bool result = true;
     15  1.1  christos 	bool err = conf_handle_bool("false", sizeof("false") - 1, &result);
     16  1.1  christos 	expect_false(err, "conf_handle_bool should succeed for \"false\"");
     17  1.1  christos 	expect_false(result, "result should be false");
     18  1.1  christos }
     19  1.1  christos TEST_END
     20  1.1  christos 
     21  1.1  christos TEST_BEGIN(test_conf_handle_bool_invalid) {
     22  1.1  christos 	bool result = false;
     23  1.1  christos 	bool err = conf_handle_bool("yes", sizeof("yes") - 1, &result);
     24  1.1  christos 	expect_true(err, "conf_handle_bool should fail for \"yes\"");
     25  1.1  christos }
     26  1.1  christos TEST_END
     27  1.1  christos 
     28  1.1  christos TEST_BEGIN(test_conf_handle_signed_valid) {
     29  1.1  christos 	intmax_t result = 0;
     30  1.1  christos 	bool     err = conf_handle_signed("5000", sizeof("5000") - 1, -1,
     31  1.1  christos 	        INTMAX_MAX, true, false, false, &result);
     32  1.1  christos 	expect_false(err, "Should succeed for valid value");
     33  1.1  christos 	expect_d64_eq((int64_t)result, 5000, "result should be 5000");
     34  1.1  christos }
     35  1.1  christos TEST_END
     36  1.1  christos 
     37  1.1  christos TEST_BEGIN(test_conf_handle_signed_negative) {
     38  1.1  christos 	intmax_t result = 0;
     39  1.1  christos 	bool err = conf_handle_signed("-1", sizeof("-1") - 1, -1, INTMAX_MAX,
     40  1.1  christos 	    true, false, false, &result);
     41  1.1  christos 	expect_false(err, "Should succeed for -1");
     42  1.1  christos 	expect_d64_eq((int64_t)result, -1, "result should be -1");
     43  1.1  christos }
     44  1.1  christos TEST_END
     45  1.1  christos 
     46  1.1  christos TEST_BEGIN(test_conf_handle_signed_out_of_range) {
     47  1.1  christos 	intmax_t result = 0;
     48  1.1  christos 	bool     err = conf_handle_signed(
     49  1.1  christos             "5000", sizeof("5000") - 1, -1, 4999, true, true, false, &result);
     50  1.1  christos 	expect_true(err, "Should fail for out-of-range value");
     51  1.1  christos }
     52  1.1  christos TEST_END
     53  1.1  christos 
     54  1.1  christos TEST_BEGIN(test_conf_handle_char_p) {
     55  1.1  christos 	char buf[8];
     56  1.1  christos 	bool err;
     57  1.1  christos 
     58  1.1  christos 	/* Normal copy. */
     59  1.1  christos 	err = conf_handle_char_p(
     60  1.1  christos 	    "hello", sizeof("hello") - 1, buf, sizeof(buf));
     61  1.1  christos 	expect_false(err, "Should succeed");
     62  1.1  christos 	expect_str_eq(buf, "hello", "Should copy string");
     63  1.1  christos 
     64  1.1  christos 	/* Truncation. */
     65  1.1  christos 	err = conf_handle_char_p(
     66  1.1  christos 	    "longstring", sizeof("longstring") - 1, buf, sizeof(buf));
     67  1.1  christos 	expect_false(err, "Should succeed even when truncating");
     68  1.1  christos 	expect_str_eq(buf, "longstr", "Should truncate to dest_sz - 1");
     69  1.1  christos }
     70  1.1  christos TEST_END
     71  1.1  christos 
     72  1.1  christos TEST_BEGIN(test_conf_handle_char_p_zero_dest_sz) {
     73  1.1  christos 	char buf[4] = {'X', 'Y', 'Z', '\0'};
     74  1.1  christos 	bool err;
     75  1.1  christos 
     76  1.1  christos 	err = conf_handle_char_p("abc", sizeof("abc") - 1, buf, 0);
     77  1.1  christos 	expect_false(err, "Should succeed for zero-sized destination");
     78  1.1  christos 	expect_c_eq(buf[0], 'X', "Zero-sized destination must not be modified");
     79  1.1  christos }
     80  1.1  christos TEST_END
     81  1.1  christos 
     82  1.1  christos int
     83  1.1  christos main(void) {
     84  1.1  christos 	return test(test_conf_handle_bool_true, test_conf_handle_bool_false,
     85  1.1  christos 	    test_conf_handle_bool_invalid, test_conf_handle_signed_valid,
     86  1.1  christos 	    test_conf_handle_signed_negative,
     87  1.1  christos 	    test_conf_handle_signed_out_of_range, test_conf_handle_char_p,
     88  1.1  christos 	    test_conf_handle_char_p_zero_dest_sz);
     89  1.1  christos }
     90