tmath1.cef
この外部関数では、すべてのセミ数値演算関数がテストされる。テストによっては、正確な値の生成が期待される。それ以外のテストでは、小さなエラーが生じるかもしれない。後者のテストについては、approx関数を使って結果の精度劣化が2ビット以下かどうかをチェックする。すべてのテストにパスすると、次のメッセージが出力される。
SUCCESS testing function, part 1
インタープリタには、このテストにパスすることが要求される。
#すべてのセミ数値演算関数のテスト :define DBL_EPSILON 2.2204460492503131e\-016 func approx return (@1 ? (abs ((@1 - @0) / @1)) (abs @0)) < (DBL_EPSILON * 4.0) endfunc :ans 0 :assert 1 :gfloat 16 assert ceil \-5.1 == \-5.0 assert ceil \-5.0 == \-5.0 assert ceil \-4.9 == \-4.0 assert ceil 0.0 == 0.0 assert ceil 4.9 == 5.0 assert ceil 5.0 == 5.0 assert ceil 5.1 == 6.0 assert abs \-5.0 == 5.0 assert abs 0.0 == 0.0 assert abs 5.0 == 5.0 assert floor \-5.1 == \-6.0 assert floor \-5.0 == \-5.0 assert floor \-4.9 == \-5.0 assert floor 0.0 == 0.0 assert floor 4.9 == 4.0 assert floor 5.0 == 5.0 assert floor 5.1 == 5.0 assert (\-7.0 % 3.0) == \-1.0 assert (\-3.0 % 3.0) == 0.0 assert (\-2.0 % 3.0) == \-2.0 assert (0.0 % 3.0) == 0.0 assert (2.0 % 3.0) == 2.0 assert (3.0 % 3.0) == 0.0 assert (7.0 % 3.0) == 1.0 assert approx (frexp \-3.0 @x) \-0.75 && @x == 2 assert approx (frexp \-0.5 @x) \-0.5 && @x == 0 assert frexp 0.0 @x == 0.0 && @x == 0 assert approx (frexp 0.33 @x) 0.66 && @x == \-1 assert approx (frexp 0.66 @x) 0.66 && @x == 0 assert approx (frexp 96.0 @x) 0.75 && @x == 7 assert ldexp \-3.0 4 == \-48.0 assert ldexp \-0.5 0 == \-0.5 assert ldexp 0.0 36 == 0.0 assert approx (ldexp 0.66 \-1) 0.33 assert ldexp 96 \-3 == 12.0 assert approx (modf \-11.7 @x) (\-11.7 + 11.0) && @x == \-11.0 assert modf \-0.5 @x == \-0.5 && @x == 0.0 assert modf 0.0 @x == 0.0 && @x == 0.0 assert modf 0.6 @x == 0.6 && @x == 0.0 assert modf 12.0 @x == 0.0 && @x == 12.0 :println ["SUCCESS testing function, part 1]
参考:「標準Cライブラリ」 P.J.プラウガー=著 トッパン