rem Test the simple2 compiler's comparisons 11/9/12 rem bitset bitclear bitcopy shift left/right loop if/then/else/endif and rem other common operations already tested in the blink.sim example. rem This program focuses on attempting to test all forms of comparisons... rem if var1 = var2 goto label rem if var1 < var2 goto label rem if var1 > var2 goto label rem if var1 <= var2 goto label rem if var1 >= var2 goto label rem if var1 <> var2 goto label rem if var1 = number goto label rem if var1 < number goto label rem if var1 > number goto label rem if var1 <= number goto label rem if var1 >= number goto label rem if var1 <> number goto label rem if var1 = var2 then rem if var1 < var2 then rem if var1 > var2 then rem if var1 <= var2 then rem if var1 >= var2 then rem if var1 <> var2 then rem if var1 = number then rem if var1 < number then rem if var1 > number then rem if var1 <= number then rem if var1 >= number then rem if var1 <> number then rem ...each test done with enough inputs to show correctness rem If pass then GPIO bit 0 is set high, otherwise low if error. rem Note... 100% coverage not guaranteed, writing test code is not easy... rem assembler-specific directives asm list p=12f675 asm radix dec asm include asm __CONFIG _WDT_OFF & _MCLRE_OFF & _PWRTE_ON & _CP_OFF & _CPD_OFF & _INTRC_OSC_NOCLKOUT asm errorlevel -302 ;suppress gpasm messages about not being in bank 0 define hiregs = STATUS.RP0 ;for banking define pindirs = 00000000B ;all outputs define outpin = GPIO.0 ;output pin byte var1 byte var2 GOTO start ;jump to actual start asm ORG 8 start: ;start of program code GPIO = 0 INTCON = 0 ADCON0 = 0 T1CON = 0 CMCON = 7 bitset hiregs ANSEL = 0 PIE1 = 0 WPU = 0 IOC = 0 OPTION_REG = 11001101B TRISIO = #pindirs bitclear hiregs rem if var1 = var2 goto label var1 = 20 var2 = 21 if var1 = var2 goto hang var1 = 20 var2 = 20 if var1 = var2 goto veqok goto hang veqok: rem if var1 < var2 goto label var1 = 30 var2 = 30 if var1 < var2 goto hang var1 = 31 var2 = 30 if var1 < var2 goto hang var1 = 30 var2 = 31 if var1 < var2 goto vltok goto hang vltok: rem if var1 > var2 goto label var1 = 30 var2 = 30 if var1 > var2 goto hang var1 = 30 var2 = 31 if var1 > var2 goto hang var1 = 31 var2 = 30 if var1 > var2 goto vgtok goto hang vgtok: rem if var1 <= var2 goto label var1 = 51 var2 = 50 if var1 <= var2 goto hang var1 = 50 var2 = 50 if var1 <= var2 goto vlteok1 goto hang vlteok1: var1 = 49 var2 = 50 if var1 <= var2 goto vlteok2 goto hang vlteok2: rem if var1 >= var2 goto label var1 = 50 var2 = 51 if var1 >= var2 goto hang var1 = 50 var2 = 50 if var1 >= var2 goto vgteok1 goto hang vgteok1: var1 = 50 var2 = 49 if var1 >= var2 goto vgteok2 goto hang vgteok2: rem if var1 <> var2 goto label var1 = 50 var2 = 50 if var1 <> var2 goto hang var1 = 50 var2 = 51 if var1 <> var2 goto vneok goto hang vneok: rem if var1 = number goto label var1 = 30 if var1 = 31 goto hang var1 = 30 if var1 = 29 goto hang var1 = 30 if var1 = 30 goto ceqok goto hang ceqok: rem if var1 < number goto label var1 = 40 if var1 < 40 goto hang var1 = 40 if var1 < 39 goto hang var1 = 40 if var1 < 41 goto cltok goto hang cltok: rem if var1 > number goto label var1 = 40 if var1 > 40 goto hang var1 = 40 if var1 > 41 goto hang var1 = 40 if var1 > 39 goto cgtok goto hang cgtok: rem if var1 <= number goto label var1 = 20 if var1 <= 19 goto hang var1 = 40 if var1 <= 40 goto clteok1 goto hang clteok1: var1 = 39 if var1 <= 40 goto clteok2 goto hang clteok2: rem if var1 >= number goto label var1 = 20 if var1 >= 21 goto hang var1 = 40 if var1 >= 40 goto cgteok1 goto hang cgteok1: var1 = 39 if var1 >= 38 goto cgteok2 goto hang cgteok2: rem if var1 <> number goto label var1 = 50 if var1 <> 50 goto hang var1 = 49 if var1 <> 50 goto cneok goto hang cneok: rem do if/then checks... for these don't reset the variables each time rem if var1 = var2 then var1 = 50 var2 = 51 if var1 = var2 then goto hang else var2 = 50 if var1 = var2 then goto vteqok endif endif goto hang vteqok: rem if var1 < var2 then var1 = 60 var2 = 60 if var1 < var2 then goto hang else var1 = 61 if var1 < var2 then goto hang else var1 = 59 if var1 < var2 then goto vtltok endif endif endif goto hang vtltok: rem if var1 > var2 then var1 = 60 var2 = 60 if var1 > var2 then goto hang else var1 = 59 if var1 > var2 then goto hang else var1 = 61 if var1 > var2 then goto vtgtok endif endif endif goto hang vtgtok: rem if var1 <= var2 then var1 = 61 var2 = 60 if var1 <= var2 then goto hang else var1 = 60 if var1 <= var2 then var1 = 59 if var1 <= var2 then goto vtlteok endif endif endif goto hang vtlteok: rem if var1 >= var2 then var1 = 60 var2 = 61 if var1 >= var2 then goto hang else var1 = 61 if var1 >= var2 then var1 = 62 if var1 >= var2 then goto vtgteok endif endif endif goto hang vtgteok: rem if var1 <> var2 then var1 = 50 var2 = 50 if var1 <> var2 then goto hang else if var1 = var2 then goto vtneok endif endif goto hang vtneok: rem if var1 = number then var1 = 25 if var1 = 26 then goto hang else if var1 = 25 then goto cteqok endif endif goto hang cteqok: rem if var1 < number then var1 = 35 if var1 < 35 then goto hang else if var1 < 34 then goto hang else if var1 < 36 then goto ctltok endif endif endif goto hang ctltok: rem if var1 > number then var1 = 35 if var1 > 35 then goto hang else if var1 > 36 then goto hang else if var1 > 34 then goto ctgtok endif endif endif goto hang ctgtok: rem if var1 <= number then var1 = 50 if var1 <= 49 then goto hang else if var1 <= 50 then if var1 <= 51 then goto ctlteok endif endif endif goto hang ctlteok: rem if var1 >= number then var1 = 50 if var1 >= 51 then goto hang else if var1 >= 50 then if var1 >= 49 then goto ctgteok endif endif endif goto hang ctgteok: rem if var1 <> number then var1 = 70 if var1 <> 70 then goto hang else if var1 <> 69 then goto ctneok endif endif goto hang ctneok: rem if all tests ok... bitset outpin hang: goto hang asm end