是的,在很久以前就開始想做這個東西,但是鴿了很久..終於又重新開始學了:p
Part1
task
tutorial裡介紹了斷言、怎麼寫宏、簡單用cmake編譯環境、常用的測試方法(TDD測試、單元測試)等。
任務是:
1. 修正關於 `LEPT_PARSE_ROOT_NOT_SINGULAR` 的單元測試,若 json 在一個值之後,空白之後還有其它字元,則要返回 `LEPT_PARSE_ROOT_NOT_SINGULAR`。 2. 參考 `test_parse_null()`,加入 `test_parse_true()`、`test_parse_false()` 單元測試。 3. 參考 `lept_parse_null()` 的實現和呼叫方,解析 true 和 false 值。
想完成任務看totorial好像沒啥用,直接面向目標程式設計。
1. 修正關於 `LEPT_PARSE_ROOT_NOT_SINGULAR` 的單元測試,若 json 在一個值之後,空白之後還有其它字元,則要返回 `LEPT_PARSE_ROOT_NOT_SINGULAR`。
發現test.c裡都是測試樣例和一個計算透過率的函式,好像沒什麼要改的,回去看tutorial,寫到:
任務目標就是改lept_parse,我的思路是先處理空格,再處理值,再處理空格。最後再判斷是否為空,但如何判斷現在c->json是不是到末尾了?問了chat:用'\0'判斷即可,最後寫出來覺得可行的
2. 參考 `test_parse_null()`,加入 `test_parse_true()`、`test_parse_false()` 單元測試。
格式很工整,沒太懂每一個部分在做什麼,先照貓畫虎
3. 參考 `lept_parse_null()` 的實現和呼叫方,解析 true 和 false 值。
繼續照貓畫虎:
在看答案前好奇執行了一下test.c,發現:
haha!開始覆盤,校驗答案。
Solution
第一問的標程是:
我的寫法:
發現我沒判在解析中間的值就出問題的情況,能解析第二個ws的前提是:中間沒出問題。重寫:
第二問的標程是:
我寫的是:
整體差不多,但沒懂為什麼test_parse_false裡v.type初始化預設為LEPT_TRUE
問了chat說如果程式碼有問題,實際上並不能把v.type修改成false,如果初始化也是false,可能導致問題沒法暴露出來。
所以:初始化隨便一個值,總之別和目標值一樣。
第三問的標程是:
我寫的是:
基本差不多,但false是+4啦!
Part1 over,整體還是簡單的。