#include "fiko/analiz/tolerans.hpp" #include "fiko_test.hpp" using namespace fiko::analiz; FIKO_TEST(tolerans_bos_zincir_sifir) { ToleransSonuc s = toleransZinciri({}); FIKO_KONTROL(s.nominal == 0); FIKO_KONTROL(s.wcTol == 0 && s.rssTol == 0); } FIKO_TEST(tolerans_iki_simetrik_toplam) { // 10±0.1 + 20±0.2 (ikisi de +yön) ToleransSonuc s = toleransZinciri({ {"a", 10, 0.1, 0.1, +1}, {"b", 20, 0.2, 0.2, +1}, }); FIKO_YAKIN(s.nominal, 30.0, 1e-9); FIKO_YAKIN(s.wcUst, 30.3, 1e-9); FIKO_YAKIN(s.wcAlt, 29.7, 1e-9); FIKO_YAKIN(s.wcTol, 0.3, 1e-9); // RSS = sqrt(0.1²+0.2²) = sqrt(0.05) ≈ 0.223607 FIKO_YAKIN(s.rssTol, 0.2236068, 1e-6); FIKO_YAKIN(s.rssUst, 30.2236068, 1e-6); } FIKO_TEST(tolerans_bosluk_a_eksi_b) { // Boşluk = A − B: A=50±0.1, B=30±0.05 ToleransSonuc s = toleransZinciri({ {"A", 50, 0.1, 0.1, +1}, {"B", 30, 0.05, 0.05, -1}, }); FIKO_YAKIN(s.nominal, 20.0, 1e-9); FIKO_YAKIN(s.wcUst, 20.15, 1e-9); FIKO_YAKIN(s.wcAlt, 19.85, 1e-9); FIKO_YAKIN(s.wcTol, 0.15, 1e-9); } FIKO_TEST(tolerans_asimetrik_tek) { // N=10, +0.2/−0.1 tek katkı → tek halkada RSS sınırları WC ile aynı olmalı. ToleransSonuc s = toleransZinciri({{"x", 10, 0.2, 0.1, +1}}); FIKO_YAKIN(s.nominal, 10.0, 1e-9); FIKO_YAKIN(s.wcUst, 10.2, 1e-9); FIKO_YAKIN(s.wcAlt, 9.9, 1e-9); FIKO_YAKIN(s.rssUst, 10.2, 1e-9); // merkez 10.05 + rss 0.15 FIKO_YAKIN(s.rssAlt, 9.9, 1e-9); FIKO_YAKIN(s.rssTol, 0.15, 1e-9); } FIKO_TEST(tolerans_rss_wc_den_dar) { // Çok katkıda RSS toleransı worst-case'ten küçük/eşit olmalı (istatistiksel). ToleransSonuc s = toleransZinciri({ {"a", 10, 0.1, 0.1, +1}, {"b", 10, 0.1, 0.1, +1}, {"c", 10, 0.1, 0.1, +1}, }); FIKO_YAKIN(s.wcTol, 0.3, 1e-9); FIKO_KONTROL(s.rssTol < s.wcTol); // sqrt(0.03)≈0.173 < 0.3 FIKO_YAKIN(s.rssTol, 0.1732051, 1e-6); }