[Test] Döngüler — while / do-while / for Davranış Farkları #100
Labels
No Label
cli-ux
faz-plani
felsefe-gozden-gecir
ffi-builtin
fikir
gelecek-vizyon
ir-vm
kalite-mimari
moduller-import
test-senaryosu
tip-sistemi
tooling-lsp
No Milestone
No project
No Assignees
1 Participants
Notifications
Due Date
No due date set.
Dependencies
No dependencies set.
Reference: saqut/saqut-compiler#100
Loading…
Reference in New Issue
No description provided.
Delete Branch "%!s(<nil>)"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Giriş (Nedir, Neden Önemli?)
Üç döngü yapısının (
while,do-while,for) birbirinden farklı davrandığı noktalar — özellikledo-while'ın gövdeyi en az bir kez çalıştırması — derleyicide kolayca karıştırılabilecek köşe durumlardır (edge case). Bu issue, bu farkları somut kodla sabitler.Test Kodu 1 — Üç döngü de aynı sayıları üretmeli (
examples/tests/donguler_temel.sqt)Beklenen Çıktı
Test Kodu 2 —
do-whilekoşulu en baştan yanlışsa bile gövde bir kez çalışır (examples/tests/do_while_en_az_bir.sqt)Beklenen Çıktı
(Eğer çıktı boş ise — yani
do-while,whilegibi davranıyorsa — bu bir bug'dır:do-while'ın AST düğümü/IR alçaltmasıwhileile aynı koddan üretilmiş ve gövdeyi koşuldan sonra kontrol etmiyor olabilir.)Açık Sorular / Bağlı Fazlar
fordöngüsünün üç parçası (init; condition; step) ayrı ayrıASTdüğümlerinde mi tutuluyor, yoksawhile'a "alçaltılıyor" (desugar) mu? İkinci durumda,for (int k = 0; ...)içindekik'nın scope'u (sadeceforbloğuna özel mi?) Faz 2'de doğru kurulmalı.break/continue(E004 ile ilişkili) bu üç döngü türünde de test edilmeli — ayrı bir test dosyası (donguler_break_continue.sqt) eklenebilir.İmza/Yorum:
do-while/whilekarışıklığı, "derleyici neredeyse bitti ama syntax X yanlış davranıyor" tarzı klasik bug'lardandır — bu test erken yazılırsa erken yakalanır.İki golden test eklendi:
loops/basic.sqt(while/do-while/for üçü de 0,1,2 üretiyor) veloops/do_while_once.sqt(koşul baştan yanlış → gövde yine de bir kez çalışıyor; 5 çıktısı). 9/9 ctest geçti.