CodeBlanks Logo Icon CodeBlanks

assert! makrosu

assert!, assert_eq! ve assert_ne! ile doğrulama yaparsın.

assert! makroları

Üç temel denetim makrosu vardır; hepsi başarısızlıkta panic verir ve isteğe bağlı bir mesaj alır:

assert!(tek_mi(3));                          // koşul true olmalı
assert_eq!(tek_mi(4), false);                // iki değer eşit olmalı
assert_ne!(kare(3), 6, "kare yanlış: {}", kare(3));   // eşit olmamalı

assert_eq! ve assert_ne!, başarısızlıkta iki değeri de yazdırır; bu yüzden değerlerin Debug ve PartialEq uygulaması gerekir.

debug_assert!

debug_assert! ailesi yalnızca debug derlemelerinde çalışır; release derlemesinde tamamen kaldırılır. Pahalı iç tutarlılık denetimleri için kullanılır:

fn ortalama(v: &[f64]) -> f64 {
    debug_assert!(!v.is_empty(), "boş dilim");
    v.iter().sum::<f64>() / v.len() as f64
}

Güvenlik ya da doğruluk için zorunlu denetimler assert! ile kalmalıdır; debug_assert! yalnızca "olmaması gereken" durumları erken yakalamak içindir.

Uygulama Denetimler

fn tek_mi(n: i32) -> bool ve fn kare(n: i32) -> i32 yaz. main'de assert!(tek_mi(3)), assert_eq!(tek_mi(4), false) ve mesajlı assert_ne!(kare(3), 6, ..) denetimlerini çalıştırıp denetimler tamam yazdır.

Başlangıç kodu

main.rs
fn main() {
    // buraya yaz
}

Örnek çözüm

main.rs
fn tek_mi(n: i32) -> bool {
    n % 2 != 0
}

fn kare(n: i32) -> i32 {
    n * n
}

fn main() {
    assert!(tek_mi(3));
    assert_eq!(tek_mi(4), false);
    assert_ne!(kare(3), 6, "kare yanlış: {}", kare(3));
    println!("denetimler tamam");
}

Beklenen çıktı

denetimler tamam

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 Ondalıklı sonuçları test ederken <code>assert_eq!(0.1 + 0.2, 0.3)</code> neden başarısız olur?

  • Kayan nokta hatası: 0.1 + 0.2 = 0.30000000000000004 Doğru cevap
  • assert_eq! f64 kabul etmez
  • Başarılı olur
  • Derlenmez

Açıklama: Ondalıklılar bir tolerans ile karşılaştırılır: assert!((a - b).abs() < 1e-9).

2 Eşit olmamalı

Soru
____(kare(3), 6, "kare yanlış");
Cevap
assert_ne!(kare(3), 6, "kare yanlış");

Açıklama: assert_ne! iki değer eşitse panic verir.

3 Makro ve başarısızlık koşulu

Kavram Anlamı
assert!(k) k false
assert_eq!(a, b) a != b
assert_ne!(a, b) a == b
debug_assert!(k) Yalnızca debug'da

Orta seviye bölümündeki tüm dersler