smaugmol@us-s2:~/D09T06_ID_1577487-1/src/s21_string$ cat Makefile
CC = gcc
CFLAGS = -Wall -Wextra -Werror -std=c11
BUILD_DIR = ../../build
strlen_tests: $(BUILD_DIR)/Quest_6
strcmp_tests: $(BUILD_DIR)/Quest_7
$(BUILD_DIR)/Quest_6: s21_string.c s21_string_test.c s21_string.h
mkdir -p $(BUILD_DIR)
$(CC) $(CFLAGS) -DTEST_STRLEN_ONLY s21_string.c s21_string_test.c -o $(BUILD_DIR)/Quest_6
$(BUILD_DIR)/Quest_7: s21_string.c s21_string_test.c s21_string.h
mkdir -p $(BUILD_DIR)
$(CC) $(CFLAGS) -DTEST_STRCMP_ONLY s21_string.c s21_string_test.c -o $(BUILD_DIR)/Quest_7
clean:
rm -f $(BUILD_DIR)/Quest_6 $(BUILD_DIR)/Quest_7
.PHONY: strlen_tests strcmp_tests clean
smaugmol@us-s2:~/D09T06_ID_1577487-1/src/s21_string$ cat s21_string.h
#ifndef S21_STRING_H
#define S21_STRING_H
#include <stdio.h>
#include <stdlib.h>
size_t s21_strlen(const char *str);
int s21_strcmp(const char *str1, const char *str2);
#endif
smaugmol@us-s2:~/D09T06_ID_1577487-1/src/s21_string$ cat s21_string.c
#include "s21_string.h"
size_t s21_strlen(const char *str) {
size_t length = 0;
while (str[length] != '\0') {
length++;
}
return length;
}
int s21_strcmp(const char *str1, const char *str2) {
while (*str1 && *str1 == *str2) {
str1++;
str2++;
}
return (unsigned char)*str1 - (unsigned char)*str2;
}
smaugmol@us-s2:~/D09T06_ID_1577487-1/src/s21_string$ cat s21_string_test.c
#include "s21_string.h"
void s21_strlen_test(void) {
const char *tests[] = {"Hello", "", "School 21"};
const size_t expected[] = {5, 0, 9};
const size_t count = sizeof(tests) / sizeof(tests[0]);
for (size_t i = 0; i < count; i++) {
size_t result = s21_strlen(tests[i]);
printf("Input: \"%s\", Output: %zu, Expected: %zu — %s\n", tests[i], result, expected[i],
result == expected[i] ? "SUCCESS" : "FAIL");
}
}
void s21_strcmp_test(void) {
const char *str1[] = {"abc", "abc", "abc", "", "a"};
const char *str2[] = {"abc", "abd", "abb", "", ""};
const int expected[] = {0, -1, 1, 0, 97};
const size_t count = sizeof(str1) / sizeof(str1[0]);
for (size_t i = 0; i < count; i++) {
int result = s21_strcmp(str1[i], str2[i]);
int success = (result == 0 && expected[i] == 0) || (result < 0 && expected[i] < 0) ||
(result > 0 && expected[i] > 0);
printf("Input: \"%s\", \"%s\", Output: %d, Expected sign: %d — %s\n", str1[i], str2[i], result,
expected[i], success ? "SUCCESS" : "FAIL");
}
}
int main(void) {
#ifdef TEST_STRLEN_ONLY
s21_strlen_test();
#elif defined(TEST_STRCMP_ONLY)
s21_strcmp_test();
#else
s21_strlen_test();
s21_strcmp_test();
#endif
return 0;
}