開發過程 宣告與算術節點的測試

2021-08-24 21:23:40 字數 2926 閱讀 4318

e, 這個算術節點指的是 arithmaticnode.

由於之前已經測試了arithmaticnode 全部可能的子節點專案, 因此這次要測試的非常簡單, 只需要檢視運算指令執行完畢後, 彈棧彈出的大小是不是期望的那麼多. 所以, 直接上測試例子了

struct list* ins;

struct list* subins;

struct arithmaticnode* a;

struct integernode* i = newintegernode(14);

a = newarithmaticnode((struct abstractvaluenode*)i);

subins = i->createinstruction(i);

ins = a->createinstruction(a);

assert(1 + subins->count(subins) == ins->count(ins));

while (0 != subins->count(subins))

assert(pop == ((struct abstractinstruction*)

(ins->elementat(ins, 0)))->code);

assert(int_size == ((struct intparaminstruction*)

(ins->elementat(ins, 0)))->param);

revert(ins->popelementat(ins, 0));

ins->finalize(ins);

subins->finalize(subins);

a->delnode(a);

對於子節點的指令, 仍然是產生相同的節點指令再一一匹配. 下面就輪到宣告語句了.

宣告語句除了產生指令之外, 還會註冊符號. 不過, 註冊符號的具體細節在符號表模組已經完成了測試, 現在只是進行一點點簡單的驗證工作, 看看指定的變數是否被註冊了. 比如這樣

struct  data[nr_test_case] = ,,,

};char* ident = "param";

char* ident1 = "param1";

struct declarationnode* dec;

struct list* ins;

initialsymtabmanager();

dec = newdeclarationnode(integer_type);

dec->vars->enqueue(dec->vars, newvariablenode(ident));

dec->initvals->enqueue(dec->initvals, null);

dec->vars->enqueue(dec->vars, newvariablenode(ident1));

dec->initvals->enqueue(dec->initvals, null);

ins = dec->createinstruction(dec);

// 型別驗證

assert(integer == typeof(dec->vars->peekat(dec->vars, 0)));

assert(integer == typeof(dec->vars->peekat(dec->vars, 1)));

assert(0 == ins->count(ins));

ins->finalize(ins);

dec->delnode(dec);

finalizesymtabmanager();

當然, 由於沒有賦初值的動作, 因此沒有任何指令產生. 對於有賦初始值的宣告語句才需要測試其生成的指令, 而這些指令與乙個算術節點非常類似

struct declarationnode* dec;

struct variablenode* var1;

struct list* ins,* subins1;

initialsymtabmanager();

dec = newdeclarationnode(real_type);

dec->vars->enqueue(dec->vars, newvariablenode(ident1));

dec->initvals->enqueue(dec->initvals, newvariablenode(ident));

var1 = newvariablenode(ident1);

ins = dec->createinstruction(dec);

assert(real == typeof(var1));

subins1 = var1->addressof(var1);

assert(ins->count(ins) - 2 ==

subins0->count(subins0) + subins1->count(subins1));

while (0 != subins1->count(subins1))

assert(real_assign == ((struct abstractinstruction*)

(ins->elementat(ins, 0)))->code);

revert(ins->popelementat(ins, 0));

assert(pop == ((struct abstractinstruction*)

(ins->elementat(ins, 0)))->code);

assert(real_size == ((struct intparaminstruction*)

(ins->elementat(ins, 0)))->param);

revert(ins->popelementat(ins, 0));

finalizesymtabmanager();

這兩類節點的指令生成測試大致就是這樣了. 請 svn update 一下 jerry 目錄吧.

App的開發過程

不同的專案管理模式或許會有完全不同的流程步驟。但是專業性幾乎是保證產品質量的唯一準則。1 需求梳理 分析 2 產品原型圖繪製 3 ui 設計 4 專案經理 技術負責人對接需求 5 技術方案 架構設計 6 專案排期 任務分解 7 產品研發階段 8 交付測試階段 9 最後,按原計畫上線 第一步 需求梳理...

測試開發過程總結 轉貼

很不錯的文章,所以轉貼之!最近公司的產品一直忙於測試,看著每天的bug不斷的增加和修正,真是痛並快樂著,痛苦是因為bug不斷的出現,快樂是看著bug乙個乙個的被消滅,把這些天的測試開發過程總結一下。1 測試要盡早 公司的產品已經修訂一段時間了,但是由於任務繁忙和人手不足,因此測試一直拖後,因此當進行...

安卓的開發過程

對於安卓的開發,沒有乙個整體的架構,缺少巨多的基礎知識。但是因為專案開發的問題,所以只能邊工作邊學習,但是導致的問題就是,學習的東西很混亂,沒有結構性,然後工作期間沒有時間去總結學習,下班倒頭就睡,導致雖然學習到很多東西,但是不知道改劃歸到什麼中,所以學習需要定期的總結,針對出現的問題,有計畫,有目...