Browse Source

+ secondnot()

carl 24 years ago
parent
commit
f64307b403
1 changed files with 167 additions and 0 deletions
  1. 167 0
      tests/test/cg/tnot.pp

+ 167 - 0
tests/test/cg/tnot.pp

@@ -0,0 +1,167 @@
+{****************************************************************}
+{  CODE GENERATOR TEST PROGRAM                                   }
+{****************************************************************}
+{ NODE TESTED : secondnot()                                      }
+{****************************************************************}
+{ PRE-REQUISITES: secondload()                                   }
+{                 secondassign()                                 }
+{****************************************************************}
+{ DEFINES:   VERBOSE = Write test information to screen          }
+{            FPC     = Target is FreePascal compiler             }
+{****************************************************************}
+{ REMARKS:                                                       }
+{                                                                }
+{                                                                }
+{                                                                }
+{****************************************************************}
+Program tnot;
+
+{----------------------------------------------------}
+{ Cases to test:                                     }
+{   CURRENT NODE (result)                            }
+{     - LOC_REGISTER                                 }
+{     - LOC_FLAGS                                    }
+{   LEFT NODE (value to complement)                  }
+{     possible cases : int64,byte,word,longint       }
+{                      boolean                       }
+{     - LOC_CREGISTER                                }
+{     - LOC_REFERENCE / LOC_MEM                      }
+{     - LOC_REGISTER                                 }
+{     - LOC_FLAGS                                    }
+{     - LOC_JUMP                                     }
+{----------------------------------------------------}
+
+
+{$IFNDEF FPC}
+type  smallint = integer;
+{$ENDIF}
+
+function getintres : smallint;
+begin
+ getintres := $7F7F;
+end;
+
+function getbyteboolval : boolean;
+begin
+  getbyteboolval := TRUE;
+end;
+
+
+var
+ longres :  longint;
+ intres : smallint;
+ byteboolval : bytebool;
+ wordboolval : wordbool;
+ longboolval : longbool;
+ byteboolres : bytebool;
+ wordboolres : wordbool;
+ longboolres : longbool;
+{$ifdef fpc}
+ int64res : int64;
+{$endif}
+Begin
+   WriteLn('------------------------------ LONGINT --------------------------------');
+   { CURRENT NODE: REGISTER }
+   { LEFT NODE : REFERENCE  }
+   WriteLn('(current) : LOC_REGISTER; (left) : LOC_REFERENCE');
+   longres := $7F7F7F7F;
+   longres := not longres;
+   Write('Value should be $80808080...');
+   if longres = $80808080 then
+      WriteLn('Success.')
+   else
+      WriteLn('Failure.');
+
+   { CURRENT NODE : REGISTER }
+   { LEFT NODE : REGISTER    }
+   WriteLn('(current) : LOC_REGISTER; (left) : LOC_REGISTER');
+   longres := not getintres;
+   Write('Value should be $8080...');
+   if longres = $FFFF8080 then
+      WriteLn('Success.')
+   else
+      WriteLn('Failure.');
+   WriteLn('----------------------------- BOOLEAN -----------------------------------');
+
+   { CURRENT NODE : LOC_REGISTER }
+   { LEFT NODE :  LOC_REFERENCE  }
+   WriteLn('(current) : LOC_REGISTER; (left) : LOC_REFERENCE');
+   byteboolval := TRUE;
+   byteboolres := not byteboolval;
+   Write('Value should be FALSE...');
+   if byteboolres = FALSE then
+      WriteLn('Success.')
+   else
+      WriteLn('Failure.');
+
+   wordboolval := TRUE;
+   wordboolres := not wordboolval;
+   Write('Value should be FALSE...');
+   if wordboolres = FALSE then
+      WriteLn('Success.')
+   else
+      WriteLn('Failure.');
+
+   longboolval := TRUE;
+   longboolres := not longboolval;
+   Write('Value should be FALSE...');
+   if longboolres = FALSE then
+      WriteLn('Success.')
+   else
+      WriteLn('Failure.');
+
+   { CURRENT NODE : LOC_REGISTER }
+   { LEFT NODE :  LOC_REGISTER  }
+   WriteLn('(current) : LOC_REGISTER; (left) : LOC_REGISTER');
+   longboolres := not getbyteboolval;
+   Write('Value should be FALSE...');
+   if longboolres = FALSE then
+      WriteLn('Success.')
+   else
+      WriteLn('Failure.');
+
+   { CURRENT NODE : LOC_FLAGS }
+   { LEFT NODE :  LOC_FLAGS  }
+   WriteLn('(current) : LOC_FLAGS; (left) : LOC_FLAGS');
+   intres := 1;
+   byteboolres := TRUE;
+   byteboolres:= not ((intres = 1));
+   Write('Value should be FALSE...');
+   if byteboolres = FALSE then
+      WriteLn('Success.')
+   else
+      WriteLn('Failure.');
+
+  { !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! }
+  { CURRENT_NODE : LOC_JUMP }
+  { ???????????????????????}
+
+  { !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! }
+  { CURRENT_NODE : LOC_FLAGS          }
+  { LEFT NODE : <> LOC_FLAGS          }
+  { !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! }
+{$IFDEF FPC}
+   WriteLn('------------------------------  INT64  ----------------------------------');
+   { CURRENT NODE: REGISTER }
+   { LEFT NODE : REFERENCE  }
+   WriteLn('(current) : LOC_REGISTER; (left) : LOC_REFERENCE');
+   int64res := $7F7F7F7F;
+   int64res := not int64res;
+   Write('Value should be $80808080...');
+   if int64res = $80808080 then
+      WriteLn('Success.')
+   else
+      WriteLn('Failure.');
+
+   { CURRENT NODE : REGISTER }
+   { LEFT NODE : REGISTER    }
+   WriteLn('(current) : LOC_REGISTER; (left) : LOC_REGISTER');
+   int64res := not (word(getintres));
+   Write('Value should be $8080...');
+   if int64res = $00008080 then
+      WriteLn('Success.')
+   else
+      WriteLn('Failure.');
+{$ENDIF}
+end.
+