#include <locale.h>
#include <errno.h>
#include <signal.h>
+#include <math.h>
#include "util.h"
#include "mkdir.h"
assert_se(parse_boolean("garbage") < 0);
assert_se(parse_boolean("") < 0);
+ assert_se(parse_boolean("full") < 0);
}
static void test_parse_pid(void) {
r = safe_atod("0.2244", &d);
assert_se(r == 0);
- assert_se(abs(d - 0.2244) < 0.000001);
+ assert_se(fabs(d - 0.2244) < 0.000001);
r = safe_atod("0,5", &d);
assert_se(r == -EINVAL);
assert_se(*e == ',');
/* Check if this really is locale independent */
- setlocale(LC_NUMERIC, "de_DE.utf8");
+ if (setlocale(LC_NUMERIC, "de_DE.utf8")) {
- r = safe_atod("0.2244", &d);
- assert_se(r == 0);
- assert_se(abs(d - 0.2244) < 0.000001);
+ r = safe_atod("0.2244", &d);
+ assert_se(r == 0);
+ assert_se(fabs(d - 0.2244) < 0.000001);
- r = safe_atod("0,5", &d);
- assert_se(r == -EINVAL);
+ r = safe_atod("0,5", &d);
+ assert_se(r == -EINVAL);
- errno = 0;
- assert_se(abs(strtod("0,5", &e) - 0.5) < 0.00001);
+ errno = 0;
+ assert_se(fabs(strtod("0,5", &e) - 0.5) < 0.00001);
+ }
/* And check again, reset */
- setlocale(LC_NUMERIC, "C");
+ assert_se(setlocale(LC_NUMERIC, "C"));
r = safe_atod("0.2244", &d);
assert_se(r == 0);
- assert_se(abs(d - 0.2244) < 0.000001);
+ assert_se(fabs(d - 0.2244) < 0.000001);
r = safe_atod("0,5", &d);
assert_se(r == -EINVAL);
}
static void test_foreach_word(void) {
- char *w, *state;
+ const char *word, *state;
size_t l;
int i = 0;
const char test[] = "test abc d\te f ";
NULL
};
- FOREACH_WORD(w, l, test, state) {
- assert_se(strneq(expected[i++], w, l));
- }
+ FOREACH_WORD(word, l, test, state)
+ assert_se(strneq(expected[i++], word, l));
}
static void test_foreach_word_quoted(void) {
- char *w, *state;
+ const char *word, *state;
size_t l;
int i = 0;
const char test[] = "test a b c 'd' e '' '' hhh '' '' \"a b c\"";
};
printf("<%s>\n", test);
- FOREACH_WORD_QUOTED(w, l, test, state) {
+ FOREACH_WORD_QUOTED(word, l, test, state) {
_cleanup_free_ char *t = NULL;
- assert_se(t = strndup(w, l));
- assert_se(strneq(expected[i++], w, l));
+ assert_se(t = strndup(word, l));
+ assert_se(strneq(expected[i++], word, l));
printf("<%s>\n", t);
}
+ assert(isempty(state));
}
static void test_default_term_for_tty(void) {
assert_se(filename_is_safe("o.o"));
}
+static void test_string_has_cc(void) {
+ assert_se(string_has_cc("abc\1", NULL));
+ assert_se(string_has_cc("abc\x7f", NULL));
+ assert_se(string_has_cc("abc\x7f", NULL));
+ assert_se(string_has_cc("abc\t\x7f", "\t"));
+ assert_se(string_has_cc("abc\t\x7f", "\t"));
+ assert_se(string_has_cc("\x7f", "\t"));
+ assert_se(string_has_cc("\x7f", "\t\a"));
+
+ assert_se(!string_has_cc("abc\t\t", "\t"));
+ assert_se(!string_has_cc("abc\t\t\a", "\t\a"));
+ assert_se(!string_has_cc("a\ab\tc", "\t\a"));
+}
+
static void test_ascii_strlower(void) {
char a[] = "AabBcC Jk Ii Od LKJJJ kkd LK";
assert_se(streq(ascii_strlower(a), "aabbcc jk ii od lkjjj kkd lk"));
assert_se(strlen(strshorten(s, 0)) == 0);
}
+static void test_strappenda(void) {
+ char *actual;
+
+ actual = strappenda("", "foo", "bar");
+ assert_se(streq(actual, "foobar"));
+
+ actual = strappenda("foo", "bar", "baz");
+ assert_se(streq(actual, "foobarbaz"));
+
+ actual = strappenda("foo", "", "bar", "baz");
+ assert_se(streq(actual, "foobarbaz"));
+}
+
int main(int argc, char *argv[]) {
log_parse_environment();
log_open();
test_log2i();
test_foreach_string();
test_filename_is_safe();
+ test_string_has_cc();
test_ascii_strlower();
test_files_same();
test_is_valid_documentation_url();
test_read_one_char();
test_ignore_signals();
test_strshorten();
+ test_strappenda();
return 0;
}