Test Kapsamı

ForgeIEC kapsamli bir otomatik test paketi ile korunmaktadir. Her commit, merge oncesi 117 birim testi ile dogrulanir. Bu testler IEC 61131-3 Structured Text dil dagarcigininin tamami, tum standart fonksiyon bloklari ve coklu gorev sistemini kapsar.

Test Paketlerine Genel Bakis

PaketTestDogrular
FStCompilerTest101Tam ST dil dagarcigi
FStLibraryTest8Tum 132 standart blok (FB + FC)
FCodeGeneratorThreadingTest8Coklu gorev zamanlamasi + kilitsiz senkronizasyon
Toplam1170 hata

1. ST Dil Dagarcigi (FStCompilerTest)

101 test, desteklenen her IEC 61131-3 Structured Text dil yapisini dogrular. Her test, bir ST parcasini FStCompiler ile derler ve uretilen C++ kodunu dogrular.

1.1 Atamalar

TestST KoduDogrular
assignSimplea := 42;Basit atama
assignExpressiona := b + 1;Ifadeli atama
assignExternalExtVar := 10;VAR_EXTERNAL erisimi
assignGvlQualifiedGVL.ExtVar := 5;Nitelikli GVL yolu

1.2 Aritmetik operatorler

TestST KoduC Operatoru
arithmeticAdda := b + 1;+
arithmeticSuba := b - 1;-
arithmeticMula := b * 2;*
arithmeticDiva := b / 2;/
arithmeticModa := b MOD 3;%
arithmeticPowerc := x ** 2.0;EXPT()
arithmeticNegatea := -b;-(...)
arithmeticParenthesesa := (b + 1) * 2;Parantezleme

1.3 Karsilastirma operatorleri

TestST KoduC Operatoru
compareEqualflag := a = b;==
compareNotEqualflag := a <> b;!=
compareLessflag := a < b;<
compareGreaterflag := a > b;>
compareLessEqualflag := a <= b;<=
compareGreaterEqualflag := a >= b;>=

1.4 Mantiksal operatorler

TestST KoduC Operatoru
boolAndflag := flag AND flag;&&
boolOrflag := flag OR flag;||
boolXorflag := flag XOR flag;^
boolNotflag := NOT flag;!

1.5 Degerler

TestST KoduDogrular
literalIntegera := 12345;Tam sayi
literalRealc := 3.14;Kayan nokta
literalBoolTrueflag := TRUE;Mantiksal deger
literalBoolFalseflag := FALSE;Mantiksal deger
literalStringtext := 'hello';Karakter dizisi
literalTimecounter := T#500ms;Zaman sabiti

1.6 Kontrol yapilari

IF / ELSIF / ELSE / END_IF

TestDogrular
ifSimpleBasit kosul
ifElseIf-Else dallanmasi
ifElsifELSIF ile coklu dallanma
ifNestedIc ice IF bloklari

FOR / WHILE / REPEAT

TestDogrular
forSimpleFOR idx := 0 TO 10 DO
forWithByBY adim genisligi ile FOR
whileLoopWHILE dongusu
repeatUntilREPEAT/UNTIL dongusu

CASE

TestDogrular
caseStatementCASE/OF birden fazla etiketle + switch/case/break

RETURN / EXIT

TestDogrular
returnStatementRETURN → goto __end
exitStatementFOR icinde EXIT → break

1.7 Fonksiyon bloklari (FB cagrilari)

TestDogrular
fbCallWithInputsMyTon(IN := flag, PT := T#500ms);
fbCallWithOutputAssignMyTimer(IN := flag, Q => flag); — OUT => atamasi

1.8 Dizi erisimi

TestDogrular
arrayReadSubscripta := arr[3];
arrayWriteSubscriptarr[5] := 42;
arrayComputedIndexa := arr[idx + 1];
arrayInForLoopFOR dongusunde dizi erisimi

1.9 Tur donusumleri

Derleyici XXX_TO_YYY kalibini tanir ve IEC standardina uygun C tarzi donusumler ((TYPE)value) uretir.

TestST KoduUretir
typeConvIntToRealINT_TO_REAL(a)(REAL)a
convRealToIntREAL_TO_INT(c)(INT)c
convBoolToIntBOOL_TO_INT(flag)(INT)flag
convIntToBoolINT_TO_BOOL(a)(BOOL)a
convDintToRealDINT_TO_REAL(counter)(REAL)counter
convIntToDintINT_TO_DINT(a)(DINT)a

1.10 Yapi uyesi erisimi

TestDogrular
structMemberAccesspos.x := 42;data__->pos.value.x

1.11 Gorevler arasi degiskenler (coklu gorev)

TestDogrular
crossPrimitiveGet__GET_EXTERNAL_ATOMIC kilitsiz okuma icin
crossPrimitiveSet__SET_EXTERNAL_ATOMIC kilitsiz yazma icin
crossStructuredGet__snap_ is parcacigi yerel snapshot erisimi
crossStructuredMemberAccess__snap_Struct.field erisimi

1.12 Standart fonksiyon bloklari

Her IEC standart FB bir ornek olarak olusturulur ve cagrilir:

TestFB TuruDogrular
fbTonTONAcma gecikmesi
fbTofTOFKapama gecikmesi
fbTpTPDarbe zamanlayicisi
fbCtuCTUYukari sayici
fbCtdCTDAsagi sayici
fbRtrigR_TRIGYukselen kenar
fbFtrigF_TRIGDusen kenar
fbRsRSReset-baskin
fbSrSRSet-baskin

1.13 Standart fonksiyonlar

KategoriTestlerFonksiyonlar
Matematik12ABS, SQRT, SIN, COS, TAN, ASIN, ACOS, ATAN, EXP, LN, LOG, TRUNC
Secim4SEL, LIMIT, MIN, MAX
Karakter dizisi6LEN, LEFT, RIGHT, MID, CONCAT, FIND
Bit kaydirma4SHL, SHR, ROL, ROR
Tur donusumu6INT_TO_REAL, REAL_TO_INT, BOOL_TO_INT, …

1.14 Sinir durumlar

TestDogrular
complexNestedExpressionIc ice ifadeler
multipleStatementsOnSeparateLinesCok satirli programlar
emptyBodyBos POU govdesi
commentOnlyBodyYalnizca yorumlar
caseInsensitiveKeywordsIF/if/If
caseInsensitiveVariablesBuyuk/kucuk harf duyarliligi

2. Standart kutuphane (FStLibraryTest)

8 veri odakli test, standart kutuphanedeki (standard_library.sql) tum 132 bloku otomatik olarak dogrular.

2.1 Fonksiyon bloklari (13 FB)

TestDogrular
fbSingleInstanceHer FB tek basina orneklenebilir ve cagrilabilir
fbDoubleInstanceAyni FB turunun iki ornegi esanli
fbOutputReadTum cikislar cagri sonrasi okunabilir

Kapsanan FB’ler: SR, RS, R_TRIG, F_TRIG, CTU, CTD, CTUD, TON, TOF, TP, RTC, SEMA, RampGen

2.2 Fonksiyonlar (119 FC)

TestDogrular
fcCallHer FC dogru parametrelerle cagrilabilir (104 test edildi)
fcInExpressionFC donus degeri ifadelerde kullanilabilir

Kapsanan kategoriler:

  • Aritmetik: ADD, SUB, MUL, DIV, MOD, EXPT, ABS
  • Karsilastirma: EQ, NE, LT, GT, LE, GE
  • Trigonometri: SIN, COS, TAN, ASIN, ACOS, ATAN, ATAN2
  • Logaritma: EXP, LN, LOG, SQRT
  • Secim: SEL, MUX, LIMIT, MIN, MAX, MOVE, CLAMP
  • Karakter dizisi: LEN, LEFT, RIGHT, MID, CONCAT, INSERT, DELETE, REPLACE, FIND
  • Bit kaydirma: SHL, SHR, ROL, ROR
  • Tur donusumu: 60+ donusum fonksiyonu (BOOL_TO_INT, INT_TO_REAL, …)
  • ForgeIEC uzantilari: LERP, MAP_RANGE, HYPOT, DEG, RAD, IK_2Link, CABS, CADD, CMUL, CSUB, CARG, CCONJ, CPOLAR, CRECT

3. Coklu gorev (FCodeGeneratorThreadingTest)

8 test, tasarim spesifikasyonuna (MT-spec, docs/design/multi-task-scheduler.md) uygun olarak tam coklu gorev zamanlama sistemini dogrular.

TestDogrular
singleProgramDefaultTaskAcik gorevi olmayan bir PROGRAM → DefaultTask sentezi, is parcacigi yok
twoProgramsTwoTasksIki gorev → RESOURCE0_start__, Legacy-Shim config_run__, her iki gorev is parcacigi
crossPrimitiveAtomicEmissionPaylasilan INT degiskeni → std::atomic<> Location depolamasi, govdede __GET_EXTERNAL_ATOMIC
crossStructuredDoubleBufferPaylasilan STRUCT → __DBUF_[2] + thread_local __snap_ + Double-Buffer giris/cikis kopyasi
localVarNoSyncYalnizca bir gorevdeki degisken → normal __SET_EXTERNAL, Atomic yok
conflictTwoWritersIki gorev ayni degiskene yazar → derleme uyarisi
singleProgramDefaultTaskGeriye uyumluluk: mevcut projeler degisiklik olmadan calisir

Coklu gorev mimarisi

Primary Task (Task 0)          Secondary Tasks (1..N)
    |                               |
    | config_run__()                | RESOURCE0_task_thread__()
    |   ├─ sync_in                  |   ├─ dbuf_rd (copy-in)
    |   ├─ TASK0_body__()           |   ├─ TASKn_body__()
    |   └─ sync_out                 |   └─ dbuf_wr (copy-out)
    |                               |
    | [bufferLock altinda]          | [lock-free]

Senkronizasyon mekanizmalari:

  • CrossPrimitive (BOOL, INT, REAL, …): Location degiskeni uzerinde std::atomic<T>, govde kodunda __GET_EXTERNAL_ATOMIC / __SET_EXTERNAL_ATOMIC
  • CrossStructured (STRUCT, ARRAY, STRING): Atomik yazma indeksli Double-Buffer __DBUF_[2], Set tutarliligi icin thread_local snapshot’lar __snap_

Kalite guvencesi

Otomatik dogrulama

Testler her derlemede -DBUILD_TESTS=ON ile calistirilir. CI hattina (Forgejo Actions) entegrasyon hazirlanmistir.

Veri odakli testler

Kutuphane testleri (FStLibraryTest) blok tanimlarini dogrudan standard_library.sql dosyasindan okur. Yeni bloklar eklendiginde otomatik olarak test edilir — manuel test senaryosu olusturmaya gerek yoktur.

Tamlık

Test paketi, ForgeIEC tarafindan desteklenen IEC 61131-3 Structured Text dil dagarcigininin tamamini kapsar:

  • Tum operatorler (aritmetik, karsilastirma, mantiksal, bit kaydirma)
  • Tum kontrol yapilari (IF, FOR, WHILE, REPEAT, CASE)
  • Tum deger turleri (Integer, Real, Bool, String, Time)
  • Tum standart FB ve FC’ler (132 blok)
  • Dizi ve yapi erisimi
  • GVL nitelikli degiskenler
  • Gorevler arasi senkronizasyon (Atomics + Double-Buffer)
  • Tur donusumleri (C donusum uretimi)