Edit

kc3-lang/kc3/test/tuple_test.c

Branch :

  • test/tuple_test.c
  • /* kc3
     * Copyright from 2022 to 2025 kmx.io <contact@kmx.io>
     *
     * Permission is hereby granted to use this software granted the above
     * copyright notice and this permission paragraph are included in all
     * copies and substantial portions of this software.
     *
     * THIS SOFTWARE IS PROVIDED "AS-IS" WITHOUT ANY GUARANTEE OF
     * PURPOSE AND PERFORMANCE. IN NO EVENT WHATSOEVER SHALL THE
     * AUTHOR BE CONSIDERED LIABLE FOR THE USE AND PERFORMANCE OF
     * THIS SOFTWARE.
     */
    #include <assert.h>
    #include <stdlib.h>
    #include <string.h>
    #include "../libkc3/tuple.h"
    #include "../libkc3/str.h"
    #include "test.h"
    
    #define TUPLE_TEST_INIT_CLEAN(test)                                    \
      do {                                                                 \
        s_tuple tuple_test;                                                \
        test_context("tuple_init(" # test ")");                            \
        TEST_EQ(tuple_init(&tuple_test, (test)), &tuple_test);             \
        tuple_clean(&tuple_test);                                          \
        test_context(NULL);                                                \
      } while (0)
    
    #define TUPLE_TEST_INIT_1(test)                                        \
      do {                                                                 \
        s_tuple tuple_test;                                                \
        test_context("tuple_init_1(" # test ")");                          \
        TEST_EQ(tuple_init_1(&tuple_test, (test)), &tuple_test);           \
        tuple_clean(&tuple_test);                                          \
        test_context(NULL);                                                \
      } while (0)
    
    #define TUPLE_TEST_NEW_1(test)                                         \
      do {                                                                 \
        s_tuple *tuple_test;                                               \
        test_context("tuple_new_1(" # test ")");                           \
        TEST_ASSERT((tuple_test = tuple_new_1((test))));                   \
        tuple_delete(tuple_test);                                          \
        test_context(NULL);                                                \
      } while (0)
    
    #define TUPLE_TEST_NEW_DELETE(test)                                    \
      do {                                                                 \
        s_tuple *tuple_test;                                               \
        test_context("tuple_new(" # test ")");                             \
        TEST_ASSERT((tuple_test = tuple_new((test))));                     \
        tuple_delete(tuple_test);                                          \
        test_context(NULL);                                                \
      } while (0)
    
    void tuple_test (void);
    TEST_CASE_PROTOTYPE(tuple_init_1);
    TEST_CASE_PROTOTYPE(tuple_init_clean);
    TEST_CASE_PROTOTYPE(tuple_new_1);
    TEST_CASE_PROTOTYPE(tuple_new_delete);
    
    void tuple_test (void)
    {
      TEST_CASE_RUN(tuple_init_clean);
      TEST_CASE_RUN(tuple_new_delete);
      TEST_CASE_RUN(tuple_init_1);
      TEST_CASE_RUN(tuple_new_1);
    }
    
    TEST_CASE(tuple_init_clean)
    {
      TUPLE_TEST_INIT_CLEAN(2);
      TUPLE_TEST_INIT_CLEAN(3);
      TUPLE_TEST_INIT_CLEAN(4);
      TUPLE_TEST_INIT_CLEAN(5);
      TUPLE_TEST_INIT_CLEAN(6);
      TUPLE_TEST_INIT_CLEAN(7);
      TUPLE_TEST_INIT_CLEAN(8);
      TUPLE_TEST_INIT_CLEAN(9);
      TUPLE_TEST_INIT_CLEAN(10);
      TUPLE_TEST_INIT_CLEAN(11);
      TUPLE_TEST_INIT_CLEAN(12);
      TUPLE_TEST_INIT_CLEAN(13);
      TUPLE_TEST_INIT_CLEAN(14);
      TUPLE_TEST_INIT_CLEAN(15);
      TUPLE_TEST_INIT_CLEAN(16);
      TUPLE_TEST_INIT_CLEAN(17);
      TUPLE_TEST_INIT_CLEAN(18);
      TUPLE_TEST_INIT_CLEAN(19);
      TUPLE_TEST_INIT_CLEAN(20);
    }
    TEST_CASE_END(tuple_init_clean)
    
    TEST_CASE(tuple_init_1)
    {
      TUPLE_TEST_INIT_1("{:a, :b}");
      TUPLE_TEST_INIT_1("{:a, :b, :c}");
      TUPLE_TEST_INIT_1("{:a, :b, :c, :d}");
      TUPLE_TEST_INIT_1("{{:a, :b}, {:c, :d}}");
      TUPLE_TEST_INIT_1("{{:a, :b}, {:c, :d}, {:e, :f}}");
      TUPLE_TEST_INIT_1("{{:a, :b}, {:c, :d}, {:e, :f}, {:g, :h}}");
      TUPLE_TEST_INIT_1("{{:a, :b}, {:c, :d}, {:e, :f}, {:g, :h}, {:i, :j}}");
    }
    TEST_CASE_END(tuple_init_1)
    
    TEST_CASE(tuple_new_1)
    {
      TUPLE_TEST_NEW_1("{:a, :b}");
      TUPLE_TEST_NEW_1("{:a, :b, :c}");
      TUPLE_TEST_NEW_1("{:a, :b, :c, :d}");
      TUPLE_TEST_NEW_1("{{:a, :b}, {:c, :d}}");
      TUPLE_TEST_NEW_1("{{:a, :b}, {:c, :d}, {:e, :f}}");
      TUPLE_TEST_NEW_1("{{:a, :b}, {:c, :d}, {:e, :f}, {:g, :h}}");
      TUPLE_TEST_NEW_1("{{:a, :b}, {:c, :d}, {:e, :f}, {:g, :h}, {:i, :j}}");
    }
    TEST_CASE_END(tuple_new_1)
    
    TEST_CASE(tuple_new_delete)
    {
      TUPLE_TEST_NEW_DELETE(2);
      TUPLE_TEST_NEW_DELETE(3);
      TUPLE_TEST_NEW_DELETE(4);
      TUPLE_TEST_NEW_DELETE(5);
      TUPLE_TEST_NEW_DELETE(6);
      TUPLE_TEST_NEW_DELETE(7);
      TUPLE_TEST_NEW_DELETE(8);
      TUPLE_TEST_NEW_DELETE(9);
      TUPLE_TEST_NEW_DELETE(10);
      TUPLE_TEST_NEW_DELETE(11);
      TUPLE_TEST_NEW_DELETE(12);
      TUPLE_TEST_NEW_DELETE(13);
      TUPLE_TEST_NEW_DELETE(14);
      TUPLE_TEST_NEW_DELETE(15);
      TUPLE_TEST_NEW_DELETE(16);
      TUPLE_TEST_NEW_DELETE(17);
      TUPLE_TEST_NEW_DELETE(18);
      TUPLE_TEST_NEW_DELETE(19);
      TUPLE_TEST_NEW_DELETE(20);
    }
    TEST_CASE_END(tuple_new_delete)