テストステ論

高テス協会会長が, テストステロンに関する情報をお届けします.

(macro-of-inline report) rubyテストは無理かも・・・

rubyのコードがおれの想像を超えてた.

In eval.c

#include "eval_error.c"
#include "eval_jump.c"

.cをインクルードしてた. これによって型が衝突した(eval_error.cがあらかじめプリプロセスされてしまってるため). まぢ泣きたい.

rubyはマクロオブインラインの色々なバグを発見してくれたんだけど, もう捨てようかと思ってる.

  • ある程度巨大である
  • こういうバカなことをしてない

ソフトウェアはないかなぁ


Rubyは, includeの仕方がカオスなので無理だと思います. テストはないですが, fioはこういうincludeがないので, コンパイルまではいけると思います. テストがあってかつコードがマシなものがあればいいなぁ

$ grep "#include" -R . | grep .c\"
./random.c:#include "siphash.c"
./thread.c:#include "thread_win32.c"
./thread.c:#include "thread_pthread.c"
./enc/windows_31j.c:#include "shift_jis.c"
./configure.in:#include "dln.c"
./sprintf.c:#include "vsnprintf.c"
./eval.c:#include "eval_error.c"
./eval.c:#include "eval_jump.c"
./error.c:#include "known_errors.inc"
./error.c:#include "known_errors.inc"
./win32/win32.c:#include "dln_find.c"
./win32/win32.c:#include "missing/nextafter.c"
./iseq.c:#include "insns.inc"
./iseq.c:#include "insns_info.inc"
./iseq.c:#include "node_name.inc"
./parse.y:#include "eventids1.c"
./parse.y:#include "eventids2.c"
./parse.y:#include "lex.c"
./symbol.c:#include "id.c"
./ext/-test-/float/nextafter.c:#include "../../../missing/nextafter.c"
./ext/nkf/nkf.c:#include "nkf-utf8/utf8tbl.c"
./ext/nkf/nkf.c:#include "nkf-utf8/nkf.c"
./ext/nkf/nkf-utf8/nkf.c:#include "nkf32dll.c"
./ext/socket/constants.c:#include "constdefs.c"
./ext/ripper/eventids2.c:#include "eventids2table.c"
./vm.c:#include "vm_insnhelper.c"
./vm.c:#include "vm_exec.c"
./vm.c:#include "vm_method.c"
./vm.c:#include "vm_eval.c"
./util.c: *     an environment, perhaps provided by #include "dtoa.c" in a
./goruby.c:#include "main.c"
./vm_insnhelper.c:#include "insns.inc"
./vm_exec.c:#include "vmtc.inc"
./vm_exec.c: #include "vm.inc"
./vm_exec.c:#include "vm.inc"
./vm_exec.c:#include "vmtc.inc"
./compile.c:#include "insns.inc"
./compile.c:#include "insns_info.inc"
./compile.c:#include "optinsn.inc"
./compile.c:#include "optunifs.inc"
./compile.c:#include "opt_sc.inc"