; Real production transport/parser/pager with controlled pipe frames, no model. .data fortuneAiTestFrame dd 31524346h,1,0 fortuneAiTestText db "Situation - Fool: " db 230 dup('a') db 10,"Obstacle - Magician: keep learning.",10 db "Direction - Star: choose a steady pace.",10 db "Advice: make a small start.",0 fortuneAiTestTextEnd LABEL BYTE FORTUNE_AI_TEST_TEXT_SIZE equ fortuneAiTestTextEnd-fortuneAiTestText fortuneAiTestBad db "only one line",0 fortuneAiTestIo dd 0 fortuneAiTestStage dd 82 .code FortuneAiNativeTests PROC uses ebx esi edi ; Create the exact receive pipe used by the child process. call CloseFortuneInference3D invoke CreatePipe,OFFSET fortuneRead3D,OFFSET fortuneChildWrite3D,0,16384 test eax,eax jz fortune_ai_test_fail mov fortuneWorkerState3D,3 mov fortunePhase3D,6 mov fortuneReadingShown3D,0 mov fortuneReadingOffset3D,0 invoke GetTickCount mov fortuneWorkerTick3D,eax ; A partial header must return immediately without losing framing. mov fortuneAiTestFrame[8],FORTUNE_AI_TEST_TEXT_SIZE-1 invoke WriteFile,fortuneChildWrite3D,OFFSET fortuneAiTestFrame,8,OFFSET fortuneAiTestIo,0 call PollFortuneWorker3D cmp fortuneWorkerState3D,3 jne fortune_ai_test_fail cmp fortuneReceiveLength3D,-1 jne fortune_ai_test_fail invoke WriteFile,fortuneChildWrite3D,OFFSET fortuneAiTestFrame+8,4,OFFSET fortuneAiTestIo,0 invoke WriteFile,fortuneChildWrite3D,OFFSET fortuneAiTestText,12,OFFSET fortuneAiTestIo,0 call PollFortuneWorker3D cmp fortuneWorkerState3D,3 jne fortune_ai_test_fail cmp fortuneReceiveLength3D,FORTUNE_AI_TEST_TEXT_SIZE-1 jne fortune_ai_test_fail invoke WriteFile,fortuneChildWrite3D,OFFSET fortuneAiTestText+12,FORTUNE_AI_TEST_TEXT_SIZE-13,OFFSET fortuneAiTestIo,0 call PollFortuneWorker3D cmp fortuneWorkerState3D,5 jne fortune_ai_test_fail mov fortuneAiTestStage,83 invoke ShowFortuneReading3D,0 cmp fortuneSpeechLength3D,220 ja fortune_ai_test_fail cmp fortuneReadingNext3D,0 je fortune_ai_test_fail mov ebx,4 fortune_ai_test_pages: call AdvanceFortuneReading3D cmp fortuneReadingOffset3D,0 je fortune_ai_test_fail cmp fortuneReadingNext3D,0 je fortune_ai_test_last_page dec ebx jnz fortune_ai_test_pages jmp fortune_ai_test_fail fortune_ai_test_last_page: call AdvanceFortuneReading3D cmp fortuneReadingShown3D,2 jne fortune_ai_test_fail ; Explicit advance moves to flip-two, never redisplays the first page. mov fortuneAiTestStage,84 mov fortuneSubMode3D,FORTUNE_SUBMODE_TAROT call UpdateFortuneSession3D cmp fortunePhase3D,7 jne fortune_ai_test_fail call CloseFortuneInference3D cmp fortuneRead3D,0 jne fortune_ai_test_fail cmp fortuneChildWrite3D,0 jne fortune_ai_test_fail cmp fortuneSections3D,0 jne fortune_ai_test_fail cmp fortuneAnswerLength3D,0 jne fortune_ai_test_fail ; Reject a complete but malformed answer. mov fortuneAiTestStage,85 lea esi,fortuneAiTestBad lea edi,fortuneAnswer3D mov ecx,SIZEOF fortuneAiTestBad rep movsb mov fortuneAnswerLength3D,SIZEOF fortuneAiTestBad-1 call ParseFortuneAnswer3D test eax,eax jnz fortune_ai_test_fail ; Reject oversized frame before reading a body. mov fortuneAiTestStage,86 invoke CreatePipe,OFFSET fortuneRead3D,OFFSET fortuneChildWrite3D,0,16384 mov fortuneWorkerState3D,3 mov fortuneAiTestFrame[8],8193 invoke WriteFile,fortuneChildWrite3D,OFFSET fortuneAiTestFrame,12,OFFSET fortuneAiTestIo,0 call PollFortuneWorker3D cmp fortuneWorkerState3D,4 jne fortune_ai_test_fail cmp fortuneRead3D,0 jne fortune_ai_test_fail mov fortuneAiTestStage,87 ; Broken pipes and timeout are visible errors, not endless thinking. invoke CreatePipe,OFFSET fortuneRead3D,OFFSET fortuneChildWrite3D,0,16384 mov fortuneWorkerState3D,3 invoke CloseHandle,fortuneChildWrite3D mov fortuneChildWrite3D,0 call PollFortuneWorker3D cmp fortuneWorkerState3D,4 jne fortune_ai_test_fail invoke CreatePipe,OFFSET fortuneRead3D,OFFSET fortuneChildWrite3D,0,16384 mov fortuneWorkerState3D,3 invoke GetTickCount sub eax,180001 mov fortuneWorkerTick3D,eax call PollFortuneWorker3D cmp fortuneWorkerState3D,4 jne fortune_ai_test_fail call CloseFortuneInference3D ; A source-only checkout must report missing weights without a child. mov fortuneModelPath3D,'!' call StartFortuneWorker3D mov fortuneModelPath3D,'a' cmp fortuneWorkerState3D,4 jne fortune_ai_test_fail cmp fortuneProcess3D,0 jne fortune_ai_test_fail cmp fortuneSpeechLength3D,0 je fortune_ai_test_fail call CloseFortuneInference3D ret fortune_ai_test_fail: invoke ExitProcess,fortuneAiTestStage ret FortuneAiNativeTests ENDP