From 1f77a03fa02b0cdbaa878cd7015838638eedc4a8 Mon Sep 17 00:00:00 2001
From: Jan Breuer <jan.breuer@jaybee.cz>
Date: 周日, 24 4月 2016 22:11:15 +0800
Subject: [PATCH] Fix strndup of NULL, add auto length for SCPI_ErrorPushEx

---
 libscpi/test/test_scpi_utils.c |   77 ++++++++++++++++++++++++++++++++++++++
 1 files changed, 77 insertions(+), 0 deletions(-)

diff --git a/libscpi/test/test_scpi_utils.c b/libscpi/test/test_scpi_utils.c
index f13f63b..83d7fb0 100644
--- a/libscpi/test/test_scpi_utils.c
+++ b/libscpi/test/test_scpi_utils.c
@@ -726,6 +726,79 @@
     TEST_COMPOSE_COMMAND(":A;C", 2, 3, 1, ":C", TRUE);
 }
 
+static void test_swap(void) {
+#define TEST_SWAP(l, a, b) CU_ASSERT_EQUAL(SCPI_Swap##l(a), b)
+
+    TEST_SWAP(16, 0x0011, 0x1100);
+    TEST_SWAP(16, 0x1234, 0x3412);
+
+    TEST_SWAP(32, 0x00000011, 0x11000000);
+    TEST_SWAP(32, 0x00001234, 0x34120000);
+    TEST_SWAP(32, 0x00AB1234, 0x3412AB00);
+    TEST_SWAP(32, 0xCDAB1234, 0x3412ABCD);
+
+    TEST_SWAP(64, 0x0000000000000011ull, 0x1100000000000000ull);
+    TEST_SWAP(64, 0x0000000000001234ull, 0x3412000000000000ull);
+    TEST_SWAP(64, 0x0000000000AB1234ull, 0x3412AB0000000000ull);
+    TEST_SWAP(64, 0x00000000CDAB1234ull, 0x3412ABCD00000000ull);
+    TEST_SWAP(64, 0x123456789ABCDEF0ull, 0xF0DEBC9A78563412ull);
+}
+
+#if USE_DEVICE_DEPENDENT_ERROR_INFORMATION && !USE_MEMORY_ALLOCATION_FREE
+
+static void test_heap(void) {
+
+#define ERROR_INFO_HEAP_LENGTH  16
+    scpi_error_info_heap_t heap;
+    char error_info_heap[ERROR_INFO_HEAP_LENGTH];
+
+    scpiheap_init(&heap, error_info_heap, ERROR_INFO_HEAP_LENGTH);
+    CU_ASSERT_EQUAL(heap.size, ERROR_INFO_HEAP_LENGTH);
+    CU_ASSERT_EQUAL(heap.data, error_info_heap);
+    CU_ASSERT_EQUAL(heap.count, heap.size);
+
+    char * ptr1 = scpiheap_strndup(&heap, "abcd", 4);
+    CU_ASSERT_STRING_EQUAL(ptr1, "abcd");
+
+    char * ptr2 = scpiheap_strndup(&heap, "xyz", 3);
+    CU_ASSERT_STRING_EQUAL(ptr2, "xyz");
+
+    char * ptr3 = scpiheap_strndup(&heap, "ghijklmnop", 10);
+    CU_ASSERT_EQUAL(ptr3, NULL);
+
+    scpiheap_free(&heap, ptr1, false);
+
+    char * ptr4 = scpiheap_strndup(&heap, "ghijklmnop", 10);
+    CU_ASSERT_NOT_EQUAL(ptr4, NULL);
+
+    const char * ptr5;
+    size_t len1, len2;
+    CU_ASSERT_EQUAL(scpiheap_get_parts(&heap, ptr4, &len1, &ptr5, &len2), TRUE);
+    CU_ASSERT_EQUAL(len1, 7);
+    CU_ASSERT_EQUAL(len2, 3);
+    CU_ASSERT_STRING_EQUAL(ptr5, "nop");
+    CU_ASSERT_EQUAL(memcmp(ptr4, "ghijklm", len1), 0);
+
+    scpiheap_free(&heap, ptr2, false);
+
+    char * ptr6 = scpiheap_strndup(&heap, "abcd", 4);
+    CU_ASSERT_STRING_EQUAL(ptr6, "abcd");
+
+    scpiheap_free(&heap, ptr6, true);
+
+    char * ptr7 = scpiheap_strndup(&heap, "123456789", 9);
+    CU_ASSERT_EQUAL(ptr7, NULL);
+
+    char * ptr8 = scpiheap_strndup(&heap, "123456789", 4);
+    CU_ASSERT_STRING_EQUAL(ptr8, "1234");
+
+    scpiheap_free(&heap, ptr4, false);
+    scpiheap_free(&heap, ptr8, false);
+    CU_ASSERT_EQUAL(heap.count, heap.size);
+
+}
+#endif
+
 int main() {
     unsigned int result;
     CU_pSuite pSuite = NULL;
@@ -761,6 +834,10 @@
             || (NULL == CU_add_test(pSuite, "matchPattern", test_matchPattern))
             || (NULL == CU_add_test(pSuite, "matchCommand", test_matchCommand))
             || (NULL == CU_add_test(pSuite, "composeCompoundCommand", test_composeCompoundCommand))
+            || (NULL == CU_add_test(pSuite, "swap", test_swap))
+#if USE_DEVICE_DEPENDENT_ERROR_INFORMATION && !USE_MEMORY_ALLOCATION_FREE
+            || (NULL == CU_add_test(pSuite, "heap", test_heap))
+#endif
             ) {
         CU_cleanup_registry();
         return CU_get_error();

--
Gitblit v1.9.1