/* Regressione #369: un solo logit NaN o +Inf faceva emettere a dist_build/dist_sample * il token 0 PER SEMPRE, in silenzio (il fallback `g_pbuf[i]>0` e' falso su NaN ovunque). * Ora la distribuzione degenere ripiega sull'argmax dei logit FINITI e avvisa una volta. * * Il test verifica: (a) con logit sani il campionamento resta corretto; (b) con NaN/+Inf * iniettato il token scelto e' l'argmax dei FINITI (mai 0 per default), su ogni posizione * del NaN inclusa lo[0]; (c) nessun NaN sopravvive in g_pbuf. */ #define main coli_glm_main_unused #include "../glm.c" #undef main #include static uint32_t rs=0x1234abcd; static uint32_t xr(){rs^=rs<<13;rs^=rs>>17;rs^=rs<<5;return rs;} static int pbuf_has_nan(int V){ for(int i=0;i 0 e nessun NaN nel buffer */ for(int i=0;ipv){pv=g_pbuf[i];picked=i;} if(b<2 && picked!=amax){ /* NaN e +Inf: delta esatto su amax */ printf(" FAIL: %s @ %d -> picked %d, atteso argmax finito %d\n",bn[b],at,picked,amax); fail=1; } } } if(!fail) printf(" NaN/+Inf iniettato: argmax dei finiti vince, mai 0/NaN ok\n"); /* (c) caso estremo: TUTTI non finiti -> non deve crashare, buffer valido */ for(int i=0;i