Browse Source

DynString_equal_c_str

Aaro Saila 3 tháng trước cách đây
mục cha
commit
61c76abf89
6 tập tin đã thay đổi với 52 bổ sung và 16 xóa
  1. 20 2
      src/DynString.c
  2. 1 0
      src/DynString.h
  3. 2 9
      src/pltf/win32/internal.c
  4. 2 2
      src/pltf/win32/internal.h
  5. 2 2
      src/pltf/win32/pltf.c
  6. 25 1
      tests/main.c

+ 20 - 2
src/DynString.c

@@ -39,11 +39,11 @@ const char* DynString_c_str(const DynString* dstr) {
 }
 
 bool DynString_equal(const DynString* s1, const DynString* s2) {
-    if (s1->len != s2->len) {
+    if (s1->data == NULL || s2->data == NULL) {
         return false;
     }
 
-    if (s1->data == NULL || s2->data == NULL) {
+    if (s1->len != s2->len) {
         return false;
     }
 
@@ -56,6 +56,24 @@ bool DynString_equal(const DynString* s1, const DynString* s2) {
     return true;
 }
 
+bool DynString_equal_c_str(const DynString* s1, const char* s2) {
+    if (s1->data == NULL || s2 == NULL) {
+        return false;
+    }
+
+    if (s1->len != strlen(s2)) {
+        return false;
+    }
+
+    for (size_t i = 0; i < s1->len; i++) {
+        if (s1->data[i] != s2[i]) {
+            return false;
+        }
+    }
+
+    return true;
+}
+
 void DynString_reserve(DynString* dstr, const size_t new_capacity) {
     if (dstr->capacity >= new_capacity) {
         return;

+ 1 - 0
src/DynString.h

@@ -17,6 +17,7 @@ void DynString_free(DynString* dstr);
 bool DynString_is_null(const DynString* dstr);
 const char* DynString_c_str(const DynString* dstr);
 bool DynString_equal(const DynString* s1, const DynString* s2);
+bool DynString_equal_c_str(const DynString* s1, const char* s2);
 void DynString_concat_c_str(
     DynString* dstr,
     const char* str,

+ 2 - 9
src/pltf/win32/internal.c

@@ -23,9 +23,9 @@ PltfWin32State pltf_state = {
 
 #undef PLTF_KEYS_X
 
-bool pltf_has_wgl_extension(const DynString* name) {
+bool pltf_has_wgl_extension(const char* name) {
     for (size_t i = 0; i < pltf_state.wgl_extensions.len; i++) {
-        if (DynString_equal(name, DynArray_DynString_at(&pltf_state.wgl_extensions, i))) {
+        if (DynString_equal_c_str(DynArray_DynString_at(&pltf_state.wgl_extensions, i), name)) {
             return true;
         }
     }
@@ -33,13 +33,6 @@ bool pltf_has_wgl_extension(const DynString* name) {
     return false;
 }
 
-bool pltf_has_wgl_extension_c_str(const char* name) {
-    DynString name_dstr = DynString_alloc(name, strlen(name));
-    const bool res = pltf_has_wgl_extension(&name_dstr);
-    DynString_free(&name_dstr);
-    return res;
-}
-
 unsigned int vk_to_pltf_key(WPARAM key) {
     switch (key) {
     case VK_ESCAPE:

+ 2 - 2
src/pltf/win32/internal.h

@@ -30,8 +30,8 @@ typedef struct {
 extern PltfWin32State pltf_state;
 extern HMODULE opengl_module;
 
-bool pltf_has_wgl_extension(const DynString* name);
-bool pltf_has_wgl_extension_c_str(const char* name);
+bool pltf_has_wgl_extension(const char* name);
+// bool pltf_has_wgl_extension_c_str(const char* name);
 unsigned int vk_to_pltf_key(WPARAM key);
 
 #endif // PLTF_WIN32_INTERNAL_H_

+ 2 - 2
src/pltf/win32/pltf.c

@@ -156,10 +156,10 @@ void pltf_gl_ctx_create() {
 
     free(wgl_extensions_str);
 
-    if (!pltf_has_wgl_extension_c_str("WGL_ARB_pixel_format")) {
+    if (!pltf_has_wgl_extension("WGL_ARB_pixel_format")) {
         LOG_FATAL("WGL_ARB_create_context extension required.");
     }
-    if (!pltf_has_wgl_extension_c_str("WGL_ARB_create_context")) {
+    if (!pltf_has_wgl_extension("WGL_ARB_create_context")) {
         LOG_FATAL("WGL_ARB_create_context extension is required");
     }
 

+ 25 - 1
tests/main.c

@@ -34,12 +34,35 @@ void test_DynString_equal(void** state) {
     DynString_free(&s2);
 
     s1 = DynString_alloc("Hello", strlen("Hello"));
+    s2 = DynString_alloc("Hell0", strlen("Hell0"));
+    assert_false(DynString_equal(&s1, &s2));
+    DynString_free(&s1);
+    DynString_free(&s2);
+
+    s1 = DynString_alloc("Hello World", strlen("Hello World"));
     s2 = DynString_alloc("Hello", strlen("Hello"));
-    assert_true(DynString_equal(&s1, &s2));
+    assert_false(DynString_equal(&s1, &s2));
     DynString_free(&s1);
     DynString_free(&s2);
 }
 
+void test_DynString_equal_c_str(void** state) {
+    DynString s1 = DynString_alloc("Hello", strlen("Hello"));
+    char* s2 = "Hello";
+    assert_true(DynString_equal_c_str(&s1, s2));
+    DynString_free(&s1);
+
+    s1 = DynString_alloc("Hello", strlen("Hello"));
+    s2 = "Hell0";
+    assert_false(DynString_equal_c_str(&s1, s2));
+    DynString_free(&s1);
+
+    s1 = DynString_alloc("Hello World", strlen("Hello World"));
+    s2 = "Hello";
+    assert_false(DynString_equal_c_str(&s1, s2));
+    DynString_free(&s1);
+}
+
 void test_DynString_concat_c_str(void** state) {
     const char* dstr_c_str = "Hello";
     const char* c_str = " World";
@@ -71,6 +94,7 @@ int main() {
         cmocka_unit_test(test_DynString_alloc),
         cmocka_unit_test(test_DynString_free),
         cmocka_unit_test(test_DynString_equal),
+        cmocka_unit_test(test_DynString_equal_c_str),
         cmocka_unit_test(test_DynString_concat_c_str),
         cmocka_unit_test(test_DynString_c_str),
     };