소스 검색

test -> test_jim

Plus add some pp test cases
rexim 1 개월 전
부모
커밋
3105ddaae6
7개의 변경된 파일139개의 추가작업 그리고 21개의 파일을 삭제
  1. 3 3
      .github/workflows/ci.yml
  2. 1 1
      .gitignore
  3. 3 3
      Makefile
  4. 3 3
      README.md
  5. 0 9
      test_expected.h
  6. 113 2
      test_jim.c
  7. 16 0
      test_jim_expected.h

+ 3 - 3
.github/workflows/ci.yml

@@ -9,7 +9,7 @@ jobs:
       - name: build all and examples
         run: |
           make -k
-          ./test
+          ./test_jim
         env:
           CC: gcc
           CXX: g++
@@ -20,7 +20,7 @@ jobs:
       - name: build all and examples
         run: |
           make -k
-          ./test
+          ./test_jim
         env:
           CC: clang
           CXX: clang++
@@ -31,7 +31,7 @@ jobs:
       - name: build all and examples
         run: |
           make -k
-          ./test
+          ./test_jim
         env:
           CC: clang
           CXX: clang++

+ 1 - 1
.gitignore

@@ -1,3 +1,3 @@
 example
-test
+test_jim
 jimp

+ 3 - 3
Makefile

@@ -1,10 +1,10 @@
 CFLAGS=-Wall -Wextra -Wswitch-enum -ggdb -I./thirdparty/
 
 .PHONY: all
-all: examples test
+all: examples test_jim
 
-test: test.c jim.h
-	$(CC) $(CFLAGS) -o test test.c 
+test_jim: test_jim.c jim.h
+	$(CC) $(CFLAGS) -o test_jim test_jim.c 
 
 .PHONY: examples
 examples: 

+ 3 - 3
README.md

@@ -124,13 +124,13 @@ $ ./example
 
 ```console
 $ make
-$ ./test
+$ ./test_jim
 ```
 
-The expected outputs of the test cases are stored in [./test_expected.h](./test_expected.h). To regenerate it just run:
+The expected outputs of the test cases are stored in [./test_jim_expected.h](./test_jim_expected.h). To regenerate it just run:
 
 ```console
-$ ./test record
+$ ./test_jim record
 ```
 
 ## Notes

+ 0 - 9
test_expected.h

@@ -1,9 +0,0 @@
-const char *test_cases_expected[] = {
-    "[null]",
-    "[false,true]",
-    "[-10,-9,-8,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7,8,9,10]",
-    "[0.0,0.0,3.1415,2.71828,1.6,null,null,null]",
-    "[\"hello\",\"world\",\"\\n\\b\\t\",\"\\u0000\\u0000\\u0000\\u0000\"]",
-    "[[],[[]],[[[]]],[[[[]]]],[[[[[]]]]]]",
-    "{\"l\":{\"l\":{\"l\":0,\"r\":1},\"r\":{\"l\":2,\"r\":3}},\"r\":{\"l\":{\"l\":4,\"r\":5},\"r\":{\"l\":6,\"r\":7}}}",
-};

+ 113 - 2
test.c → test_jim.c

@@ -8,10 +8,11 @@
 #define NOB_STRIP_PREFIX
 #include "./nob.h"
 
-#include "./test_expected.h"
+#include "./test_jim_expected.h"
 
 void null_case(Jim *jim)
 {
+    jim_begin(jim);
     jim_array_begin(jim);
     jim_null(jim);
     jim_array_end(jim);
@@ -19,6 +20,7 @@ void null_case(Jim *jim)
 
 void bool_case(Jim *jim)
 {
+    jim_begin(jim);
     jim_array_begin(jim);
     jim_bool(jim, 0);
     jim_bool(jim, 1);
@@ -27,6 +29,7 @@ void bool_case(Jim *jim)
 
 void integer_case(Jim *jim)
 {
+    jim_begin(jim);
     jim_array_begin(jim);
     for (int i = -10; i <= 10; ++i) {
         jim_integer(jim, i);
@@ -36,6 +39,7 @@ void integer_case(Jim *jim)
 
 void float_case(Jim *jim)
 {
+    jim_begin(jim);
     jim_array_begin(jim);
     jim_float(jim, 0.0, 4);
     jim_float(jim, -0.0, 4);
@@ -50,6 +54,7 @@ void float_case(Jim *jim)
 
 void string_case(Jim *jim)
 {
+    jim_begin(jim);
     jim_array_begin(jim);
     jim_string(jim, "hello");
     jim_string(jim, "world");
@@ -60,6 +65,7 @@ void string_case(Jim *jim)
 
 void array_case(Jim *jim)
 {
+    jim_begin(jim);
     jim_array_begin(jim);
 
     for (int n = 1; n <= 5; ++n) {
@@ -86,10 +92,106 @@ void object_case_rec(Jim *jim, int level, int *counter)
 
 void object_case(Jim *jim)
 {
+    jim_begin(jim);
     int counter = 0;
     object_case_rec(jim, 0, &counter);
 }
 
+void pp_empty_array_case(Jim *jim)
+{
+    jim_begin(jim);
+    jim->pp = 4;
+    jim_array_begin(jim);
+    jim_array_end(jim);
+}
+
+void pp_singleton_array_case(Jim *jim)
+{
+    jim_begin(jim);
+    jim->pp = 4;
+    jim_array_begin(jim);
+    jim_integer(jim, 69);
+    jim_array_end(jim);
+}
+
+void pp_array_case(Jim *jim)
+{
+    jim_begin(jim);
+    jim->pp = 4;
+    jim_array_begin(jim);
+    jim_integer(jim, 69);
+    jim_integer(jim, 420);
+    jim_integer(jim, 1337);
+    jim_integer(jim, 80085);
+    jim_array_end(jim);
+}
+
+void pp_empty_object_case(Jim *jim)
+{
+    jim_begin(jim);
+    jim->pp = 4;
+    jim_object_begin(jim);
+    jim_object_end(jim);
+}
+
+void pp_singleton_object_case(Jim *jim)
+{
+    jim_begin(jim);
+    jim->pp = 4;
+    jim_object_begin(jim);
+    jim_member_key(jim, "foo");
+    jim_integer(jim, 69);
+    jim_object_end(jim);
+}
+
+void pp_object_case(Jim *jim)
+{
+    jim_begin(jim);
+    jim->pp = 4;
+    jim_object_begin(jim);
+    jim_member_key(jim, "foo");
+    jim_integer(jim, 69);
+    jim_member_key(jim, "bar");
+    jim_integer(jim, 420);
+    jim_member_key(jim, "baz");
+    jim_integer(jim, 1337);
+    jim_object_end(jim);
+}
+
+void pp_nested_case(Jim *jim)
+{
+    jim_begin(jim);
+    jim->pp = 4;
+    jim_object_begin(jim);
+        jim_member_key(jim, "integer");
+        jim_integer(jim, 69);
+        jim_member_key(jim, "empty_array");
+        jim_array_begin(jim);
+        jim_array_end(jim);
+        jim_member_key(jim, "empty_object");
+        jim_object_begin(jim);
+        jim_object_end(jim);
+        jim_member_key(jim, "array_of_integers");
+        jim_array_begin(jim);
+            jim_integer(jim, 69);
+            jim_integer(jim, 420);
+            jim_integer(jim, 1337);
+            jim_integer(jim, 80085);
+        jim_array_end(jim);
+        jim_member_key(jim, "object_of_integers");
+        jim_object_begin(jim);
+            jim_member_key(jim, "foo");
+            jim_integer(jim, 69);
+            jim_member_key(jim, "bar");
+            jim_integer(jim, 420);
+            jim_member_key(jim, "baz");
+            jim_integer(jim, 1337);
+            jim_member_key(jim, "karabaz");
+            jim_integer(jim, 80085);
+        jim_object_end(jim);
+    jim_object_end(jim);
+}
+
 typedef struct {
     const char *name;
     void (*run)(Jim *jim);
@@ -109,6 +211,13 @@ const Test_Case test_cases[] = {
     TEST_CASE(string_case),
     TEST_CASE(array_case),
     TEST_CASE(object_case),
+    TEST_CASE(pp_empty_array_case),
+    TEST_CASE(pp_singleton_array_case),
+    TEST_CASE(pp_array_case),
+    TEST_CASE(pp_empty_object_case),
+    TEST_CASE(pp_singleton_object_case),
+    TEST_CASE(pp_object_case),
+    TEST_CASE(pp_nested_case),
 };
 
 bool record(const char *header_path)
@@ -135,6 +244,8 @@ void test(void)
 {
     Jim jim_buffer = {0};
 
+
+    assert(ARRAY_LEN(test_cases) == ARRAY_LEN(test_cases_expected) && "Run `record` command to update expected test cases");
     for (size_t i = 0; i < ARRAY_LEN(test_cases); ++i) {
         printf("%s ... ", test_cases[i].name);
 
@@ -159,7 +270,7 @@ int main(int argc, char **argv)
 {
     if (argc >= 2) {
         if (strcmp(argv[1], "record") == 0) {
-            if (!record("test_expected.h")) return 1;
+            if (!record("test_jim_expected.h")) return 1;
         } else {
             fprintf(stderr, "Usage: ./test [record]\n");
             fprintf(stderr, "ERROR: unknown subcommand %s.\n", argv[1]);

+ 16 - 0
test_jim_expected.h

@@ -0,0 +1,16 @@
+const char *test_cases_expected[] = {
+    "[null]",
+    "[false,true]",
+    "[-10,-9,-8,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7,8,9,10]",
+    "[0.0,0.0,3.1415,2.71828,1.6,null,null,null]",
+    "[\"hello\",\"world\",\"\\n\\b\\t\",\"\\u0000\\u0000\\u0000\\u0000\"]",
+    "[[],[[]],[[[]]],[[[[]]]],[[[[[]]]]]]",
+    "{\"l\":{\"l\":{\"l\":0,\"r\":1},\"r\":{\"l\":2,\"r\":3}},\"r\":{\"l\":{\"l\":4,\"r\":5},\"r\":{\"l\":6,\"r\":7}}}",
+    "[]",
+    "[\n    69\n]",
+    "[\n    69,\n    420,\n    1337,\n    80085\n]",
+    "{}",
+    "{\n    \"foo\": 69\n}",
+    "{\n    \"foo\": 69,\n    \"bar\": 420,\n    \"baz\": 1337\n}",
+    "{\n    \"integer\": 69,\n    \"empty_array\": [],\n    \"empty_object\": {},\n    \"array_of_integers\": [\n        69,\n        420,\n        1337,\n        80085\n    ],\n    \"object_of_integers\": {\n        \"foo\": 69,\n        \"bar\": 420,\n        \"baz\": 1337,\n        \"karabaz\": 80085\n    }\n}",
+};