/* * t_smoke.c — проверка самого каркаса, а не движка. * * Главное здесь — TC_EQ(sizeof(int), 2): она доказывает, что тест реально * исполняется с z80-семантикой, а не собран хостовым компилятором. Ради * этого весь прогон под ucsim и затевался (см. обсуждение 16/32 бит). */ #include "tcheck.h" TC_TEST(smoke_z80_widths) { TC_EQ(sizeof(int), 2); /* мы под z80, int 16 бит */ TC_EQ(sizeof(void *), 2); TC_EQ(sizeof(long), 4); } TC_TEST(smoke_arith) { static volatile uint8_t a, b; /* volatile: иначе SDCC свернёт всё * в константу и тест ничего не * проверит (warning 110) */ int16_t s; a = 200; b = 100; s = (int16_t)(a + b); /* байты повышаются до int */ TC_EQ(s, 300); TC_EQ((uint8_t)(a + b), 44); /* явный заворот в байт */ } TC_TEST(smoke_wraparound_is_16bit) { /* Ровно тот случай, который на хосте посчитался бы в 32 битах: * здесь заворот обязан произойти. */ static volatile uint16_t a, b; a = 60000; b = 10000; TC_EQ((uint16_t)(a + b), 4464); TC_TRUE((uint16_t)(a + b) < 65000); } int main(void) { TC_RUN(smoke_z80_widths); TC_RUN(smoke_arith); TC_RUN(smoke_wraparound_is_16bit); return 0; }