#include "stm32g0xx.h"
#include "display_bus.h"
#include <assert.h>
#include <stdio.h>
gpio mock_gpio;rcc mock_rcc;timer mock_tim;uint32_t SystemCoreClock;
int main(void){
 mock_gpio=(gpio){.MODER=0xabcdef12,.OTYPER=0x4321,.PUPDR=0x12345678,.IDR=(1u<<6)|(1u<<7)};
 mock_rcc=(rcc){.IOPENR=0x40,.APBENR2=0x100};
 uint32_t mode=mock_gpio.MODER,type=mock_gpio.OTYPER,pup=mock_gpio.PUPDR;
 SystemCoreClock=8000000;assert(!display_bus_init());assert(mock_gpio.MODER==mode);
 SystemCoreClock=16000000;mock_rcc.CFGR=1u<<12;assert(!display_bus_init());assert(mock_gpio.MODER==mode);
 mock_rcc.CFGR=0;assert(display_bus_init());
 uint32_t mask=(3u<<12)|(3u<<14);
 assert(mock_gpio.MODER==((mode&~mask)|(1u<<12)|(1u<<14)));
 assert(mock_gpio.OTYPER==(type|(1u<<6)|(1u<<7))&&mock_gpio.PUPDR==(pup&~mask));
 assert(mock_gpio.BSRR==((1u<<6)|(1u<<7)));
 assert(mock_rcc.IOPENR==0x41&&mock_rcc.APBENR2==(0x100|(1u<<15)));
 assert(mock_tim.PSC==15&&mock_tim.ARR==65535&&mock_tim.CR1==1&&mock_tim.DIER==0&&mock_tim.CCER==0);
 uint8_t data=0;assert(!display_bus_write(0,0x3c,&data,1));assert(display_bus_last_status()==SI_TIMER_STALLED);
 assert(mock_gpio.BSRR==(1u<<7));
 puts("PASS actual GPIO binding: onlyPA6/PA7 open-drain modes changed; TIM14 clock/config guard; stalled register counter exits");
}
