Sözleşmeli Programlama
Birim testlerinin yazımına main
'deki kodlar kopyalanarak başlanabilir. Aşağıdaki programa yalnızca ikinci takımın kazandığı durumun testi eklenmiş:
int puanEkle(int goller1, int goller2, ref int puan1, ref int puan2) in { assert(goller1 >= 0); assert(goller2 >= 0); assert(puan1 >= 0); assert(puan2 >= 0); } out (sonuç) { assert((sonuç >= 0) && (sonuç <= 2)); } do { int kazanan; if (goller1 > goller2) { puan1 += 3; kazanan = 1; } else if (goller1 < goller2) { puan2 += 3; kazanan = 2; } else { ++puan1; ++puan2; kazanan = 0; } return kazanan; } unittest { int birincininPuanı = 10; int ikincininPuanı = 7; int kazananTaraf; // Birinci takım kazanır kazananTaraf = puanEkle(3, 1, birincininPuanı, ikincininPuanı); assert(birincininPuanı == 13); assert(ikincininPuanı == 7); assert(kazananTaraf == 1); // Berabere kazananTaraf = puanEkle(2, 2, birincininPuanı, ikincininPuanı); assert(birincininPuanı == 14); assert(ikincininPuanı == 8); assert(kazananTaraf == 0); // İkinci takım kazanır kazananTaraf = puanEkle(0, 1, birincininPuanı, ikincininPuanı); assert(birincininPuanı == 14); assert(ikincininPuanı == 11); assert(kazananTaraf == 2); } void main() { // ... }
Bu işlevde de sözleşme ifadelerinden yararlanılabilir:
int puanEkle(int goller1, int goller2, ref int puan1, ref int puan2) in (goller1 >= 0) in (goller2 >= 0) in (puan1 >= 0) in (puan2 >= 0) out (sonuç; (sonuç >= 0) && (sonuç <= 2)) { // ... }