#include "gpsim_assert.h" #include "picregs.h" unsigned char failures=0; unsigned int uint0 = 0; unsigned int uint1 = 0; unsigned char uchar0 = 0; unsigned char uchar1 = 0; void dput(unsigned char val) { PORTB = val; PORTA = 0x01; PORTA = 0x00; } void done() { ASSERT(MANGLE(failures) == 0); PASSED(); } /* both loops use the loop variable inside the inner loop */ void for1(void) { unsigned char i, j; uchar0 = 0; uchar1 = 0; for(i = 0; i < 3; i++) { uchar0++; for(j = 0; j < 4; j++) { uchar1++; dput(i); dput(j); } } if(uchar0 != 3) failures++; if(uchar1 != 12) failures++; } /* only the outer loop's variable is used inside, inner can be optimized into a repeat-loop */ void for2(void) { unsigned char i, j; uchar0 = 0; uchar1 = 0; for(i = 0; i < 3; i++) { uchar0++; for(j = 0; j < 4; j++) { uchar1++; dput(i); } } if(uchar0 != 3) failures++; if(uchar1 != 12) failures++; } /* only the inner loop's variable is used inside */ void for3(void) { unsigned char i, j; uchar0 = 0; uchar1 = 0; for(i = 0; i < 3; i++) { uchar0++; for(j = 0; j < 4; j++) { uchar1++; dput(j); } } if(uchar0 != 3) failures++; if(uchar1 != 12) failures++; } /* neither loop variable used inside the loops */ void for4(void) { unsigned char i, j; uchar0 = 0; uchar1 = 0; for(i = 0; i < 3; i++) { uchar0++; for(j = 0; j < 4; j++) { uchar1++; dput(uchar0); dput(uchar1); } } if(uchar0 != 3) failures++; if(uchar1 != 12) failures++; } /* like for1 but different condition in inner loop */ void for5(void) { unsigned char i, j; uchar0 = 0; uchar1 = 0; for(i = 0; i < 3; i++) { uchar0++; for(j = 10; j >= 5; j--) { uchar1++; dput(i); dput(j); } } if(uchar0 != 3) failures++; if(uchar1 != 18) failures++; } void main(void) { for1(); for2(); for3(); for4(); for5(); done(); }