carats 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (422) hide show
  1. data/ChangeLog +2 -0
  2. data/LICENSE +5 -0
  3. data/README +67 -0
  4. data/Reapfile +72 -0
  5. data/ToDo +24 -0
  6. data/bench/b_harray.rb +49 -0
  7. data/bench/b_range.rb +64 -0
  8. data/demo/ansicolor/cdiff.rb +20 -0
  9. data/demo/ansicolor/example.rb +82 -0
  10. data/demo/io-reactor/chatserver.rb +347 -0
  11. data/doc/classes/Array.html +172 -0
  12. data/doc/classes/BBCode.html +638 -0
  13. data/doc/classes/BinaryReader.html +675 -0
  14. data/doc/classes/Binding.html +223 -0
  15. data/doc/classes/ByteOrder.html +284 -0
  16. data/doc/classes/Class.html +189 -0
  17. data/doc/classes/Constant.html +785 -0
  18. data/doc/classes/Constant/CGS.html +609 -0
  19. data/doc/classes/Continuation.html +113 -0
  20. data/doc/classes/Coroutine.html +387 -0
  21. data/doc/classes/CountingSemaphore.html +337 -0
  22. data/doc/classes/CrossCase.html +561 -0
  23. data/doc/classes/DynamicMixin.html +185 -0
  24. data/doc/classes/EnumerableWithArgs.html +550 -0
  25. data/doc/classes/Expect.html +428 -0
  26. data/doc/classes/Expect/DefaultChain.html +113 -0
  27. data/doc/classes/Expect/SeparatedPattern.html +223 -0
  28. data/doc/classes/Expect/Timeout.html +167 -0
  29. data/doc/classes/Expect/UnmatchedMessage.html +160 -0
  30. data/doc/classes/FileList.html +833 -0
  31. data/doc/classes/FloatString.html +534 -0
  32. data/doc/classes/Functor.html +211 -0
  33. data/doc/classes/HArray.html +1872 -0
  34. data/doc/classes/HTML.html +328 -0
  35. data/doc/classes/Heap.html +683 -0
  36. data/doc/classes/Heap/EmptyHeapException.html +111 -0
  37. data/doc/classes/Heap/Max.html +176 -0
  38. data/doc/classes/Heap/Min.html +176 -0
  39. data/doc/classes/IO.html +108 -0
  40. data/doc/classes/IO/Reactor.html +790 -0
  41. data/doc/classes/IO/Redirect.html +289 -0
  42. data/doc/classes/Infinity.html +320 -0
  43. data/doc/classes/Interval.html +1014 -0
  44. data/doc/classes/InvalidNackError.html +161 -0
  45. data/doc/classes/Kernel.html +204 -0
  46. data/doc/classes/Lisp.html +1132 -0
  47. data/doc/classes/Lisp/DottedPair.html +379 -0
  48. data/doc/classes/Lisp/Format.html +178 -0
  49. data/doc/classes/Lisp/Format/ArgumentError.html +126 -0
  50. data/doc/classes/Lisp/Format/Directives.html +155 -0
  51. data/doc/classes/Lisp/Format/Directives/ArgJump.html +178 -0
  52. data/doc/classes/Lisp/Format/Directives/Ascii.html +119 -0
  53. data/doc/classes/Lisp/Format/Directives/BeginCaseConversion.html +185 -0
  54. data/doc/classes/Lisp/Format/Directives/BeginConditional.html +307 -0
  55. data/doc/classes/Lisp/Format/Directives/BeginIteration.html +338 -0
  56. data/doc/classes/Lisp/Format/Directives/Binary.html +157 -0
  57. data/doc/classes/Lisp/Format/Directives/Character.html +228 -0
  58. data/doc/classes/Lisp/Format/Directives/CharacterDirective.html +203 -0
  59. data/doc/classes/Lisp/Format/Directives/ClauseSeparator.html +166 -0
  60. data/doc/classes/Lisp/Format/Directives/Decimal.html +119 -0
  61. data/doc/classes/Lisp/Format/Directives/Directive.html +397 -0
  62. data/doc/classes/Lisp/Format/Directives/DollarFP.html +205 -0
  63. data/doc/classes/Lisp/Format/Directives/EndCaseConversion.html +174 -0
  64. data/doc/classes/Lisp/Format/Directives/EndConditional.html +159 -0
  65. data/doc/classes/Lisp/Format/Directives/EndIteration.html +163 -0
  66. data/doc/classes/Lisp/Format/Directives/ExpFP.html +252 -0
  67. data/doc/classes/Lisp/Format/Directives/FFFP.html +224 -0
  68. data/doc/classes/Lisp/Format/Directives/Factory.html +180 -0
  69. data/doc/classes/Lisp/Format/Directives/FreshLine.html +175 -0
  70. data/doc/classes/Lisp/Format/Directives/GeneralFP.html +265 -0
  71. data/doc/classes/Lisp/Format/Directives/Hexadecimal.html +157 -0
  72. data/doc/classes/Lisp/Format/Directives/Indirection.html +183 -0
  73. data/doc/classes/Lisp/Format/Directives/Literal.html +187 -0
  74. data/doc/classes/Lisp/Format/Directives/NewLine.html +158 -0
  75. data/doc/classes/Lisp/Format/Directives/NewPage.html +158 -0
  76. data/doc/classes/Lisp/Format/Directives/Number.html +243 -0
  77. data/doc/classes/Lisp/Format/Directives/Octal.html +157 -0
  78. data/doc/classes/Lisp/Format/Directives/Plural.html +177 -0
  79. data/doc/classes/Lisp/Format/Directives/Print.html +237 -0
  80. data/doc/classes/Lisp/Format/Directives/Radix.html +432 -0
  81. data/doc/classes/Lisp/Format/Directives/SExpression.html +157 -0
  82. data/doc/classes/Lisp/Format/Directives/SkipWhitespace.html +165 -0
  83. data/doc/classes/Lisp/Format/Directives/Tabulate.html +198 -0
  84. data/doc/classes/Lisp/Format/Directives/Tilde.html +158 -0
  85. data/doc/classes/Lisp/Format/Directives/UnknownDirectiveError.html +117 -0
  86. data/doc/classes/Lisp/Format/Formatter.html +193 -0
  87. data/doc/classes/Lisp/Format/IncompleteParameterError.html +119 -0
  88. data/doc/classes/Lisp/Format/IndexError.html +126 -0
  89. data/doc/classes/Lisp/Format/Lexer.html +479 -0
  90. data/doc/classes/Lisp/Format/MalformedError.html +119 -0
  91. data/doc/classes/Lisp/Format/MissingParameterError.html +119 -0
  92. data/doc/classes/Lisp/Format/ModifierError.html +119 -0
  93. data/doc/classes/Lisp/Format/Output.html +239 -0
  94. data/doc/classes/Lisp/Format/ParameterError.html +126 -0
  95. data/doc/classes/Lisp/Format/Parameters.html +123 -0
  96. data/doc/classes/Lisp/Format/Parameters/Argument.html +172 -0
  97. data/doc/classes/Lisp/Format/Parameters/ArgumentCount.html +159 -0
  98. data/doc/classes/Lisp/Format/Parameters/Character.html +119 -0
  99. data/doc/classes/Lisp/Format/Parameters/Default.html +120 -0
  100. data/doc/classes/Lisp/Format/Parameters/Integer.html +119 -0
  101. data/doc/classes/Lisp/Format/Parameters/Parameter.html +206 -0
  102. data/doc/classes/Lisp/Format/Parser.html +212 -0
  103. data/doc/classes/Lisp/Format/Positioned.html +166 -0
  104. data/doc/classes/Lisp/Format/State.html +455 -0
  105. data/doc/classes/Lisp/Format/SyntaxError.html +126 -0
  106. data/doc/classes/Method.html +274 -0
  107. data/doc/classes/Method/DuckHunter.html +281 -0
  108. data/doc/classes/Module.html +709 -0
  109. data/doc/classes/Multiton.html +284 -0
  110. data/doc/classes/Multiton/New.html +164 -0
  111. data/doc/classes/Multiton/Semi.html +155 -0
  112. data/doc/classes/NackClass.html +322 -0
  113. data/doc/classes/NilClass.html +231 -0
  114. data/doc/classes/NilComparable.html +179 -0
  115. data/doc/classes/NotCopyable.html +273 -0
  116. data/doc/classes/Object.html +261 -0
  117. data/doc/classes/OpenStructable.html +346 -0
  118. data/doc/classes/OrderedHash.html +939 -0
  119. data/doc/classes/Parser.html +515 -0
  120. data/doc/classes/Parser/Main.html +178 -0
  121. data/doc/classes/Parser/Marker.html +475 -0
  122. data/doc/classes/Parser/Registry.html +354 -0
  123. data/doc/classes/Parser/Token.html +399 -0
  124. data/doc/classes/Parser/UnitToken.html +222 -0
  125. data/doc/classes/Ref.html +230 -0
  126. data/doc/classes/SimpleStringIO.html +183 -0
  127. data/doc/classes/StaticHash.html +202 -0
  128. data/doc/classes/String.html +172 -0
  129. data/doc/classes/Struct.html +181 -0
  130. data/doc/classes/SuperStruct.html +382 -0
  131. data/doc/classes/Term.html +156 -0
  132. data/doc/classes/Term/ANSIColor.html +185 -0
  133. data/doc/classes/Text.html +138 -0
  134. data/doc/classes/Text/Soundex.html +222 -0
  135. data/doc/classes/TextTagIterator.html +911 -0
  136. data/doc/classes/Time.html +119 -0
  137. data/doc/classes/Time/Limit.html +303 -0
  138. data/doc/classes/Time/Limit/Dummy.html +181 -0
  139. data/doc/classes/Timer.html +351 -0
  140. data/doc/classes/TracePoint.html +532 -0
  141. data/doc/classes/Tuple.html +178 -0
  142. data/doc/classes/Uninheritable.html +213 -0
  143. data/doc/classes/Version.html +783 -0
  144. data/doc/created.rid +1 -0
  145. data/doc/files/LICENSE.html +113 -0
  146. data/doc/files/README.html +201 -0
  147. data/doc/files/lib/carat/1st_rb.html +107 -0
  148. data/doc/files/lib/carat/ansicolor_rb.html +146 -0
  149. data/doc/files/lib/carat/attr_rb.html +101 -0
  150. data/doc/files/lib/carat/bbcode_rb.html +152 -0
  151. data/doc/files/lib/carat/binaryreader_rb.html +114 -0
  152. data/doc/files/lib/carat/binding-of-caller_rb.html +108 -0
  153. data/doc/files/lib/carat/byteorder_rb.html +107 -0
  154. data/doc/files/lib/carat/constant_rb.html +167 -0
  155. data/doc/files/lib/carat/coroutine_rb.html +156 -0
  156. data/doc/files/lib/carat/crosscase_rb.html +224 -0
  157. data/doc/files/lib/carat/duckhunter_rb.html +165 -0
  158. data/doc/files/lib/carat/dynamic-mixin_rb.html +101 -0
  159. data/doc/files/lib/carat/enumerable-args_rb.html +140 -0
  160. data/doc/files/lib/carat/expect_rb.html +137 -0
  161. data/doc/files/lib/carat/filelist_rb.html +130 -0
  162. data/doc/files/lib/carat/floatstring_rb.html +126 -0
  163. data/doc/files/lib/carat/functor_rb.html +140 -0
  164. data/doc/files/lib/carat/harray_rb.html +128 -0
  165. data/doc/files/lib/carat/heap_rb.html +154 -0
  166. data/doc/files/lib/carat/html-helpers_rb.html +116 -0
  167. data/doc/files/lib/carat/infinity_rb.html +142 -0
  168. data/doc/files/lib/carat/init_rb.html +127 -0
  169. data/doc/files/lib/carat/interval_rb.html +162 -0
  170. data/doc/files/lib/carat/io-reactor_rb.html +211 -0
  171. data/doc/files/lib/carat/io-redirect_rb.html +132 -0
  172. data/doc/files/lib/carat/lisp-format_rb.html +187 -0
  173. data/doc/files/lib/carat/lisp_rb.html +152 -0
  174. data/doc/files/lib/carat/macro_rb.html +129 -0
  175. data/doc/files/lib/carat/multiton_rb.html +178 -0
  176. data/doc/files/lib/carat/nack_rb.html +193 -0
  177. data/doc/files/lib/carat/nil-comparable_rb.html +126 -0
  178. data/doc/files/lib/carat/nil-missing_rb.html +101 -0
  179. data/doc/files/lib/carat/notcopyable_rb.html +166 -0
  180. data/doc/files/lib/carat/orderedhash_rb.html +107 -0
  181. data/doc/files/lib/carat/ostructable_rb.html +157 -0
  182. data/doc/files/lib/carat/parser-old_rb.html +239 -0
  183. data/doc/files/lib/carat/parser_rb.html +244 -0
  184. data/doc/files/lib/carat/ref_rb.html +107 -0
  185. data/doc/files/lib/carat/semaphore_rb.html +132 -0
  186. data/doc/files/lib/carat/snapshot_rb.html +152 -0
  187. data/doc/files/lib/carat/soundex_rb.html +128 -0
  188. data/doc/files/lib/carat/sstruct_rb.html +142 -0
  189. data/doc/files/lib/carat/statichash_rb.html +150 -0
  190. data/doc/files/lib/carat/tagiter_rb.html +236 -0
  191. data/doc/files/lib/carat/timelimit_rb.html +136 -0
  192. data/doc/files/lib/carat/timer_rb.html +153 -0
  193. data/doc/files/lib/carat/tracepoint_rb.html +160 -0
  194. data/doc/files/lib/carat/tuple_rb.html +123 -0
  195. data/doc/files/lib/carat/uninheritable_rb.html +101 -0
  196. data/doc/files/lib/carat/version_rb.html +141 -0
  197. data/doc/fr_class_index.html +159 -0
  198. data/doc/fr_file_index.html +78 -0
  199. data/doc/fr_method_index.html +663 -0
  200. data/doc/index.html +24 -0
  201. data/doc/rdoc-style.css +208 -0
  202. data/lib/carat-dev/README +11 -0
  203. data/lib/carat-dev/access-blocks/access_blocks.rb +42 -0
  204. data/lib/carat-dev/association/association.rb +70 -0
  205. data/lib/carat-dev/blankslate/blankslate.rb +51 -0
  206. data/lib/carat-dev/breakpoint.rb +518 -0
  207. data/lib/carat-dev/class-constructor/constructor_methods.rb +78 -0
  208. data/lib/carat-dev/class-constructor/tc_constructor.rb +35 -0
  209. data/lib/carat-dev/closecall/closecall-test.rb +39 -0
  210. data/lib/carat-dev/closecall/closecall.rb +101 -0
  211. data/lib/carat-dev/commandrunner/commandrunner.rb +100 -0
  212. data/lib/carat-dev/conditional/conditionals.rb +106 -0
  213. data/lib/carat-dev/daemon/daemon.rb +70 -0
  214. data/lib/carat-dev/detach/detach.rb +363 -0
  215. data/lib/carat-dev/detach/tc_detach.rb +57 -0
  216. data/lib/carat-dev/import-module/import-module-0.81.tar.gz +0 -0
  217. data/lib/carat-dev/import-module/import-module-0.81/LICENSE +1 -0
  218. data/lib/carat-dev/import-module/import-module-0.81/Makefile +11 -0
  219. data/lib/carat-dev/import-module/import-module-0.81/README +4 -0
  220. data/lib/carat-dev/import-module/import-module-0.81/dev-lib/import-module-hash.rb +49 -0
  221. data/lib/carat-dev/import-module/import-module-0.81/dev-lib/import-module-pip.rb +71 -0
  222. data/lib/carat-dev/import-module/import-module-0.81/dev-lib/import-module-unbound-method.rb +36 -0
  223. data/lib/carat-dev/import-module/import-module-0.81/doc/README-ja.html +293 -0
  224. data/lib/carat-dev/import-module/import-module-0.81/doc/README-ja.rd +306 -0
  225. data/lib/carat-dev/import-module/import-module-0.81/doc/README.html +290 -0
  226. data/lib/carat-dev/import-module/import-module-0.81/doc/README.rd +303 -0
  227. data/lib/carat-dev/import-module/import-module-0.81/doc/style.css +85 -0
  228. data/lib/carat-dev/import-module/import-module-0.81/install.rb +99 -0
  229. data/lib/carat-dev/import-module/import-module-0.81/lib/import-module-single-thread.rb +84 -0
  230. data/lib/carat-dev/import-module/import-module-0.81/lib/import-module.rb +493 -0
  231. data/lib/carat-dev/import-module/import-module-0.81/test/Makefile +2 -0
  232. data/lib/carat-dev/import-module/import-module-0.81/test/test +91 -0
  233. data/lib/carat-dev/import-module/import-module-0.81/test/test-import-module.rb +936 -0
  234. data/lib/carat-dev/import-module/import-module-0.81/test/test-import_scope.rb +33 -0
  235. data/lib/carat-dev/import-module/import-module-0.81/test/test-scope_import.rb +33 -0
  236. data/lib/carat-dev/import-module/import-module-0.81/test/test-time.rb +184 -0
  237. data/lib/carat-dev/import-module/import-module-0.81/test/test.sh +91 -0
  238. data/lib/carat-dev/import-module/import-module-0.81/test/time.rb +135 -0
  239. data/lib/carat-dev/import-module/import-module-0.81/test/times-do.sh +10 -0
  240. data/lib/carat-dev/interface_work/SCRAP/i-contracts.rb +37 -0
  241. data/lib/carat-dev/interface_work/SCRAP/interface.rb +105 -0
  242. data/lib/carat-dev/interface_work/SCRAP/j-interface/interface-0.1.0.zip +0 -0
  243. data/lib/carat-dev/interface_work/SCRAP/j-interface/interface-0.1.0/CHANGES +3 -0
  244. data/lib/carat-dev/interface_work/SCRAP/j-interface/interface-0.1.0/MANIFEST +15 -0
  245. data/lib/carat-dev/interface_work/SCRAP/j-interface/interface-0.1.0/README +32 -0
  246. data/lib/carat-dev/interface_work/SCRAP/j-interface/interface-0.1.0/doc/interface.rd +73 -0
  247. data/lib/carat-dev/interface_work/SCRAP/j-interface/interface-0.1.0/doc/interface.txt +94 -0
  248. data/lib/carat-dev/interface_work/SCRAP/j-interface/interface-0.1.0/install.rb +16 -0
  249. data/lib/carat-dev/interface_work/SCRAP/j-interface/interface-0.1.0/lib/interface.rb +50 -0
  250. data/lib/carat-dev/interface_work/SCRAP/j-interface/interface-0.1.0/test/tc_interface.rb +51 -0
  251. data/lib/carat-dev/interface_work/SCRAP/j-interface/interface-0.1.0/test/test.rb +29 -0
  252. data/lib/carat-dev/interface_work/SCRAP/j-interface/interface-0.1.0/test/test_instance.rb +24 -0
  253. data/lib/carat-dev/interface_work/SCRAP/j-interface/interface-0.1.0/test/test_sub.rb +29 -0
  254. data/lib/carat-dev/interface_work/SCRAP/j-interface/interface-0.1.0/test/test_unrequire.rb +28 -0
  255. data/lib/carat-dev/interface_work/contracts/contract.zip +0 -0
  256. data/lib/carat-dev/interface_work/contracts/contract/doc/classes/Contract.html +376 -0
  257. data/lib/carat-dev/interface_work/contracts/contract/doc/classes/Contract.src/M000001.html +23 -0
  258. data/lib/carat-dev/interface_work/contracts/contract/doc/classes/Contract.src/M000002.html +18 -0
  259. data/lib/carat-dev/interface_work/contracts/contract/doc/classes/Contract.src/M000003.html +19 -0
  260. data/lib/carat-dev/interface_work/contracts/contract/doc/classes/Contract.src/M000004.html +29 -0
  261. data/lib/carat-dev/interface_work/contracts/contract/doc/classes/Contract.src/M000005.html +18 -0
  262. data/lib/carat-dev/interface_work/contracts/contract/doc/classes/Contract.src/M000006.html +18 -0
  263. data/lib/carat-dev/interface_work/contracts/contract/doc/classes/Contract/ContractError.html +142 -0
  264. data/lib/carat-dev/interface_work/contracts/contract/doc/classes/Contract/ContractException.html +153 -0
  265. data/lib/carat-dev/interface_work/contracts/contract/doc/classes/Contract/ContractMismatch.html +125 -0
  266. data/lib/carat-dev/interface_work/contracts/contract/doc/classes/Module.html +157 -0
  267. data/lib/carat-dev/interface_work/contracts/contract/doc/classes/Module.src/M000007.html +112 -0
  268. data/lib/carat-dev/interface_work/contracts/contract/doc/created.rid +1 -0
  269. data/lib/carat-dev/interface_work/contracts/contract/doc/files/lib/contract/assertions_rb.html +109 -0
  270. data/lib/carat-dev/interface_work/contracts/contract/doc/files/lib/contract/exception_rb.html +108 -0
  271. data/lib/carat-dev/interface_work/contracts/contract/doc/files/lib/contract/integration_rb.html +108 -0
  272. data/lib/carat-dev/interface_work/contracts/contract/doc/files/lib/contract/overrides_rb.html +109 -0
  273. data/lib/carat-dev/interface_work/contracts/contract/doc/files/lib/contract_rb.html +114 -0
  274. data/lib/carat-dev/interface_work/contracts/contract/doc/fr_class_index.html +31 -0
  275. data/lib/carat-dev/interface_work/contracts/contract/doc/fr_file_index.html +31 -0
  276. data/lib/carat-dev/interface_work/contracts/contract/doc/fr_method_index.html +33 -0
  277. data/lib/carat-dev/interface_work/contracts/contract/doc/index.html +24 -0
  278. data/lib/carat-dev/interface_work/contracts/contract/doc/rdoc-style.css +208 -0
  279. data/lib/carat-dev/interface_work/contracts/contract/lib/contract.rb +88 -0
  280. data/lib/carat-dev/interface_work/contracts/contract/lib/contract/assertions.rb +37 -0
  281. data/lib/carat-dev/interface_work/contracts/contract/lib/contract/exception.rb +92 -0
  282. data/lib/carat-dev/interface_work/contracts/contract/lib/contract/integration.rb +132 -0
  283. data/lib/carat-dev/interface_work/contracts/contract/lib/contract/overrides.rb +32 -0
  284. data/lib/carat-dev/interface_work/must.rb +37 -0
  285. data/lib/carat-dev/interface_work/type.rb +232 -0
  286. data/lib/carat-dev/main/tc_toplevel.rb +23 -0
  287. data/lib/carat-dev/main/toplevel.rb +33 -0
  288. data/lib/carat-dev/main/toplevel_test.rb +24 -0
  289. data/lib/carat-dev/misc/1.rb +40 -0
  290. data/lib/carat-dev/misc/misc.rb +44 -0
  291. data/lib/carat-dev/misc/sys.rb +186 -0
  292. data/lib/carat-dev/misc/temp.rb +1 -0
  293. data/lib/carat-dev/misc/utils.rb +518 -0
  294. data/lib/carat-dev/predicate/predicate.rb +109 -0
  295. data/lib/carat-dev/predicate/predicate_test.rb +67 -0
  296. data/lib/carat-dev/premshree.rb +40 -0
  297. data/lib/carat-dev/priority-queue/pqueue.rb +183 -0
  298. data/lib/carat-dev/priority-queue/priorityqueue.rb +84 -0
  299. data/lib/carat-dev/quaternion/quaternion.rb +529 -0
  300. data/lib/carat-dev/range.rb +259 -0
  301. data/lib/carat-dev/system/rubyinfo.rb +75 -0
  302. data/lib/carat-dev/system/system.rb +105 -0
  303. data/lib/carat-dev/tc_range.rb +118 -0
  304. data/lib/carat-dev/timer/timer-doc/classes/Timer.html +291 -0
  305. data/lib/carat-dev/timer/timer-doc/classes/Timer.src/M000001.html +26 -0
  306. data/lib/carat-dev/timer/timer-doc/classes/Timer.src/M000002.html +19 -0
  307. data/lib/carat-dev/timer/timer-doc/classes/Timer.src/M000003.html +18 -0
  308. data/lib/carat-dev/timer/timer-doc/classes/Timer.src/M000004.html +18 -0
  309. data/lib/carat-dev/timer/timer-doc/classes/Timer.src/M000005.html +21 -0
  310. data/lib/carat-dev/timer/timer-doc/classes/Timer.src/M000006.html +23 -0
  311. data/lib/carat-dev/timer/timer-doc/created.rid +1 -0
  312. data/lib/carat-dev/timer/timer-doc/files/timer_rb.html +144 -0
  313. data/lib/carat-dev/timer/timer-doc/fr_class_index.html +27 -0
  314. data/lib/carat-dev/timer/timer-doc/fr_file_index.html +27 -0
  315. data/lib/carat-dev/timer/timer-doc/fr_method_index.html +32 -0
  316. data/lib/carat-dev/timer/timer-doc/index.html +24 -0
  317. data/lib/carat-dev/timer/timer-doc/rdoc-style.css +208 -0
  318. data/lib/carat-dev/timer/timer.rb +160 -0
  319. data/lib/carat-dev/vars/vars.rb +62 -0
  320. data/lib/carat/1st.rb +58 -0
  321. data/lib/carat/ansicolor.rb +122 -0
  322. data/lib/carat/attr.rb +342 -0
  323. data/lib/carat/bbcode.rb +352 -0
  324. data/lib/carat/binaryreader.rb +170 -0
  325. data/lib/carat/binding-of-caller.rb +83 -0
  326. data/lib/carat/byteorder.rb +34 -0
  327. data/lib/carat/constant.rb +287 -0
  328. data/lib/carat/coroutine.rb +102 -0
  329. data/lib/carat/crosscase.rb +309 -0
  330. data/lib/carat/duckhunter.rb +158 -0
  331. data/lib/carat/dynamic-mixin.rb +71 -0
  332. data/lib/carat/enumerable-args.rb +125 -0
  333. data/lib/carat/expect.rb +192 -0
  334. data/lib/carat/filelist.rb +277 -0
  335. data/lib/carat/floatstring.rb +153 -0
  336. data/lib/carat/functor.rb +41 -0
  337. data/lib/carat/harray.rb +507 -0
  338. data/lib/carat/heap.rb +193 -0
  339. data/lib/carat/html-helpers.rb +82 -0
  340. data/lib/carat/infinity.rb +61 -0
  341. data/lib/carat/init.rb +33 -0
  342. data/lib/carat/interval.rb +248 -0
  343. data/lib/carat/io-reactor.rb +657 -0
  344. data/lib/carat/io-redirect.rb +99 -0
  345. data/lib/carat/lisp-format.rb +1832 -0
  346. data/lib/carat/lisp.rb +336 -0
  347. data/lib/carat/macro.rb +68 -0
  348. data/lib/carat/multiton.rb +153 -0
  349. data/lib/carat/nack.rb +115 -0
  350. data/lib/carat/nil-comparable.rb +67 -0
  351. data/lib/carat/nil-missing.rb +12 -0
  352. data/lib/carat/notcopyable.rb +68 -0
  353. data/lib/carat/orderedhash.rb +249 -0
  354. data/lib/carat/ostructable.rb +138 -0
  355. data/lib/carat/parser-old.rb +350 -0
  356. data/lib/carat/parser.rb +393 -0
  357. data/lib/carat/ref.rb +31 -0
  358. data/lib/carat/semaphore.rb +69 -0
  359. data/lib/carat/snapshot.rb +94 -0
  360. data/lib/carat/soundex.rb +104 -0
  361. data/lib/carat/sstruct.rb +223 -0
  362. data/lib/carat/statichash.rb +49 -0
  363. data/lib/carat/tagiter.rb +345 -0
  364. data/lib/carat/timelimit.rb +114 -0
  365. data/lib/carat/timer.rb +99 -0
  366. data/lib/carat/tracepoint.rb +154 -0
  367. data/lib/carat/tuple.rb +31 -0
  368. data/lib/carat/uninheritable.rb +68 -0
  369. data/lib/carat/version.rb +147 -0
  370. data/pub/doc/sstruct.txt +204 -0
  371. data/pub/doc/tagiter.html +145 -0
  372. data/setup.rb +1361 -0
  373. data/test/fixtures/filelist/testfile.txt +1 -0
  374. data/test/fixtures/filelist/testfile2.txt +1 -0
  375. data/test/tc_1st.rb +16 -0
  376. data/test/tc_ansicolor.rb +23 -0
  377. data/test/tc_attr.rb +46 -0
  378. data/test/tc_bbcode.rb +20 -0
  379. data/test/tc_binaryreader.rb +14 -0
  380. data/test/tc_binding_of_caller.rb +2 -0
  381. data/test/tc_byteorder.rb +41 -0
  382. data/test/tc_constant.rb +12 -0
  383. data/test/tc_coroutine.rb +50 -0
  384. data/test/tc_crosscase.rb +33 -0
  385. data/test/tc_duckhunter.rb +37 -0
  386. data/test/tc_dynamic-mixin.rb +66 -0
  387. data/test/tc_enumerable-args.rb +66 -0
  388. data/test/tc_expect.rb +83 -0
  389. data/test/tc_filelist.rb +17 -0
  390. data/test/tc_floatstring.rb +22 -0
  391. data/test/tc_functor.rb +18 -0
  392. data/test/tc_harray.rb +280 -0
  393. data/test/tc_heap.rb +6 -0
  394. data/test/tc_infinity.rb +23 -0
  395. data/test/tc_init.rb +29 -0
  396. data/test/tc_interval.rb +153 -0
  397. data/test/tc_io-reactor.rb +5 -0
  398. data/test/tc_io-redirect.rb +5 -0
  399. data/test/tc_lisp-format.rb +24 -0
  400. data/test/tc_lisp.rb +32 -0
  401. data/test/tc_macro.rb +48 -0
  402. data/test/tc_multiton.rb +188 -0
  403. data/test/tc_nack.rb +31 -0
  404. data/test/tc_nil-as-emptiness.rb +19 -0
  405. data/test/tc_nil-comparable.rb +29 -0
  406. data/test/tc_nil-missing.rb +0 -0
  407. data/test/tc_notcopyable.rb +64 -0
  408. data/test/tc_orderedhash.rb +36 -0
  409. data/test/tc_ostructable.rb +31 -0
  410. data/test/tc_semaphore.rb +5 -0
  411. data/test/tc_snapshot.rb +20 -0
  412. data/test/tc_soundex.rb +19 -0
  413. data/test/tc_sstruct.rb +313 -0
  414. data/test/tc_statichash.rb +24 -0
  415. data/test/tc_tagiter.rb +80 -0
  416. data/test/tc_timelimit.rb +47 -0
  417. data/test/tc_timer.rb +35 -0
  418. data/test/tc_tracepoint.rb +10 -0
  419. data/test/tc_tuple.rb +25 -0
  420. data/test/tc_uninheritable.rb +33 -0
  421. data/test/tc_version.rb +90 -0
  422. metadata +531 -0
@@ -0,0 +1,91 @@
1
+ #!/bin/sh
2
+ modes="mpuscbaqh"
3
+ all_option="m s p u h"
4
+ script="./test-import-module.rb"
5
+ devdir="../develop"
6
+ time_script="$devdir/test-time.rb"
7
+ time_prog="$devdir/test-time.rb"
8
+ times_do_script="$devdir/times-do.sh"
9
+ statics="$devdir/statics.rb"
10
+
11
+ set_program() {
12
+ case $1 in
13
+ # m) option="";;
14
+ m) option=m;;
15
+ p) option=p;;
16
+ q) option=q;;
17
+ h) option=h;;
18
+ u) option=u;;
19
+ s) option=s;;
20
+ c) option=c;;
21
+ b) option=b;;
22
+ a) option=a;;
23
+ *) option=$1;;
24
+ esac
25
+ program="$script $option $args"
26
+ }
27
+
28
+ test_list() {
29
+ for opt in $*
30
+ do
31
+ set_program $opt
32
+ #echo $program; continue
33
+ if $program; then
34
+ :
35
+ else
36
+ exit
37
+ fi
38
+ done
39
+ }
40
+
41
+ search_args() {
42
+ args=""
43
+ opts=""
44
+ for arg in $*
45
+ do
46
+ case $arg in
47
+ [$modes]) opts="$opts $arg";;
48
+ *.rb) opts="$opts $arg";;
49
+ times) times_sw="true";;
50
+ time) timetest=time; script=$time_script;;
51
+ # *) args="$args $arg";;
52
+ *) if [ "$times_sw" ]; then
53
+ times_sw=""
54
+ times_do=$arg
55
+ else
56
+ args="$args $arg"
57
+ fi;;
58
+ esac
59
+ done
60
+ }
61
+
62
+ search_args $*
63
+
64
+ if [ "$times_do" ]; then
65
+ $times_do_script $times_do $0 time $opts $args | $statics
66
+ elif [ "$timetest" ]; then
67
+ if [ ! "$opts" ]; then
68
+ opts="s m p c"
69
+ fi
70
+ test_list $opts
71
+ # echo $time_prog $opts $args
72
+ else
73
+ if [ "$opts" ]; then
74
+ test_list $opts
75
+ echo $opts IS GOOD.
76
+ # elif [ ! "$*" ]; then
77
+ elif :; then
78
+ test_list $all_option
79
+ echo $all_option IS GOOD.
80
+ else
81
+ echo "$0 ... do all test"
82
+ echo "$0 m ... do multi-thread test"
83
+ echo "$0 s ... do single thread test ($import_module_s)"
84
+ echo "$0 p ... do multi-thread test ($import_module_p)"
85
+ echo "$0 u ... do multi-thread test ($import_module_u)"
86
+ echo "$0 h ... do multi-thread test ($import_module_h)"
87
+ echo "$0 time [N] [mspucba] [L|S] ... time test (do N loops)"
88
+ echo "$0 times [n] [N] [mspucba] [L|S] ... Statics"
89
+ fi
90
+ fi
91
+
@@ -0,0 +1,936 @@
1
+ #!/usr/local/bin/ruby
2
+ #$IMPORT_MODULE_debug = true
3
+ #$d2 = true
4
+ #$SUPER = true
5
+ #$debug = true
6
+ #$PIP = true
7
+
8
+ Thread.abort_on_exception = true
9
+ $single_thread = false
10
+ $script_dir = ""#"../"
11
+ ["..", "../lib", "../dev-lib"].each do |x|
12
+ $LOAD_PATH.unshift x
13
+ end
14
+ $import_module = $script_dir + "import-module"
15
+
16
+ ARGV.delete_if do |x|
17
+ case x
18
+ when "m"
19
+ $import_module = $script_dir + "import-module"
20
+ true
21
+ when "p"
22
+ $import_module = $script_dir + "import-module-pip"
23
+ true
24
+ when "q"
25
+ $import_module = $script_dir + "import-module-pip-b"
26
+ true
27
+ when "h"
28
+ $import_module = $script_dir + "import-module-hash"
29
+ true
30
+ when "u"
31
+ $import_module = $script_dir + "import-module-unbound-method"
32
+ $stderr.puts "Warning: 'import' is not tested for unbound-method"
33
+ $UNBOUND = true
34
+ true
35
+ when "s"
36
+ $import_module = $script_dir + "import-module-single-thread"
37
+ $single_thread_mode = true
38
+ true
39
+ when /^:/
40
+ $spot = x.sub(/^:/, '')
41
+ true
42
+ when /\.rb$/
43
+ $import_module = x
44
+ true
45
+ else
46
+ false
47
+ end
48
+ end
49
+
50
+ require $import_module
51
+ #puts Import_Module::IMPORT_MODULE_Version
52
+
53
+ $N = 0
54
+ def assert(m, n = nil)
55
+ return if $spot && self.to_s != $spot
56
+ $N += 1
57
+ unless n.nil?
58
+ if m == n
59
+ puts "#$N (#{self}): OK"
60
+ else
61
+ puts "NG (#{self}): #{m.inspect} != #{n.inspect}"
62
+ puts caller#.first
63
+ exit!(255)
64
+ end
65
+ else
66
+ if m
67
+ puts "#$N (#{self}): OK"
68
+ else
69
+ puts "NG (#{self}): #{m.inspect}"
70
+ puts caller#.first
71
+ exit!(255)
72
+ end
73
+ end
74
+ end
75
+
76
+ puts "SINGLE THREAD TEST"
77
+
78
+ module First
79
+ class A
80
+ def m; 0; end
81
+ end
82
+ module M
83
+ def m; 1; end
84
+ end
85
+ a = A.new
86
+ assert(a.m, 0)
87
+ A.import_module(M) do
88
+ assert(a.m, 1)
89
+ end
90
+ assert(a.m, 0)
91
+ end
92
+
93
+ module Second
94
+ module M001
95
+ def m; 1; end
96
+ end
97
+ module M002
98
+ def m; 2; end
99
+ end
100
+ class A000
101
+ def m; 0; end
102
+ end
103
+ a = A000.new
104
+ A000.import_module(M001) do
105
+ A000.import_module(M002) do
106
+ assert(a.m, 2)
107
+ end
108
+ assert(a.m, 1)
109
+ end
110
+ assert(a.m, 0)
111
+ end
112
+
113
+ # non existance
114
+ module NonExistance
115
+ module M021
116
+ def m; 1; end
117
+ end
118
+ module M022
119
+ def m; 2; end
120
+ end
121
+ class A020
122
+ end
123
+ a = A020.new
124
+ A020.import_module(M021) do
125
+ A020.import_module(M022) do
126
+ assert(a.m, 2)
127
+ end
128
+ assert(a.m, 1)
129
+ end
130
+ begin
131
+ assert(a.m, 0)
132
+ rescue NameError
133
+ else
134
+ raise
135
+ end
136
+ end
137
+
138
+ # Elementary
139
+ module Elementary
140
+ module MMm0
141
+ def m; 0; end
142
+ end
143
+ module MMm1
144
+ def m; 1; end
145
+ end
146
+ module MMm2
147
+ def m; 2; end
148
+ end
149
+ class Am3
150
+ def m; 3; end
151
+ end
152
+ class Bm4
153
+ def m; 4; end
154
+ end
155
+ module MMm5
156
+ def m; 5; end
157
+ end
158
+ module MMm6
159
+ def m; 6; end
160
+ def n; 7; end
161
+ end
162
+ module MMmi6
163
+ include MMm6
164
+ end
165
+ a = Am3.new
166
+ b = Bm4.new
167
+ assert(a.m, 3)
168
+ assert(b.m, 4)
169
+ Am3.import_module(MMm0) do
170
+ assert(a.m, 0)
171
+ assert(b.m, 4)
172
+ Bm4.import_module(MMm2) do
173
+ assert(a.m, 0)
174
+ assert(b.m, 2)
175
+ Bm4.import_module(MMmi6) do
176
+ assert(a.m, 0)
177
+ assert(b.m, 6)
178
+ # assert(b.n, 7)
179
+ end
180
+ assert(a.m, 0)
181
+ assert(b.m, 2)
182
+ Am3.import_module(MMm5) do
183
+ assert(a.m, 5)
184
+ assert(b.m, 2)
185
+ end
186
+ assert(a.m, 0)
187
+ assert(b.m, 2)
188
+ end
189
+ assert(a.m, 0)
190
+ assert(b.m, 4)
191
+ end
192
+ assert(a.m, 3)
193
+ assert(b.m, 4)
194
+ end
195
+
196
+ module StarArg
197
+ class Am3
198
+ def m; 3; end
199
+ end
200
+ module MMm7
201
+ def f(x); x; end
202
+ def g(x, *a); [x]+a; end
203
+ end
204
+ module MMm8
205
+ def f(x); x+1; end
206
+ def g(x, *a); [x+1]+a; end
207
+ end
208
+ a = Am3.new
209
+ Am3.import_module(MMm7) do
210
+ assert(a.f(0), 0)
211
+ assert(a.g(0, 0), [0, 0])
212
+ Am3.import_module(MMm8) do
213
+ assert(a.f(0), 1)
214
+ assert(a.g(0, 1), [1, 1])
215
+ end
216
+ assert(a.f(0), 0)
217
+ assert(a.g(0, 0), [0, 0])
218
+ end
219
+ end
220
+
221
+ ##### inheritance
222
+ module Inheritance
223
+ class Foo21
224
+ def foo; 21; end
225
+ end
226
+ class Bar21
227
+ def bar; 21; end
228
+ end
229
+ module S22
230
+ def foo; 22; end
231
+ def bar; 22; end
232
+ end
233
+ class Foo23 < Foo21
234
+ end
235
+ class Bar23 < Bar21
236
+ def bar; 23; end
237
+ end
238
+
239
+ o = Foo23.new
240
+ u = Bar23.new
241
+ Foo21.import_module(S22) do
242
+ assert(o.foo, 22)
243
+ end
244
+ #Foo21.import_module(S22) do
245
+ Bar21.import_module(S22) do
246
+ assert(u.bar, 23)
247
+ end
248
+ end
249
+
250
+ # Private, New Method
251
+ module Private_NewMethod
252
+ class C0m_n
253
+ def m; 0; end
254
+ def n; 0; end
255
+ def assert_n(x)
256
+ assert(n, x)
257
+ end
258
+ private :n
259
+ end
260
+ module M1mnq
261
+ def m; 1; end
262
+ def n; 1; end
263
+ def q; 1; end
264
+ private :n
265
+ end
266
+ o = C0m_n.new
267
+ assert(o.m, 0)
268
+ o.assert_n(0)
269
+ C0m_n.import_module(M1mnq) do
270
+ assert(o.m, 1)
271
+ o.assert_n(1)
272
+ assert(o.q, 1)
273
+ end
274
+ assert(o.m, 0)
275
+ o.assert_n(0)
276
+ begin
277
+ o.n
278
+ rescue NameError
279
+ else
280
+ raise "ERROR: can call private method"
281
+ end
282
+ end
283
+
284
+ module Private_Protected
285
+ class Foo
286
+ def public_foo; end
287
+ def private_foo; end
288
+ def protected_foo; end
289
+ private :private_foo
290
+ protected :protected_foo
291
+ end
292
+
293
+ module Bar
294
+ def public_foo; end
295
+ def private_foo; end
296
+ def protected_foo; end
297
+ end
298
+
299
+ Foo.import_module(Bar) do
300
+ assert(Foo.public_instance_methods(true).include?("public_foo"), true)
301
+ assert(Foo.private_instance_methods(true).include?("private_foo"), true)
302
+ assert(Foo.protected_instance_methods(true).include?("protected_foo"), true)
303
+ end
304
+ assert(Foo.public_instance_methods(true).include?("public_foo"), true)
305
+ assert(Foo.private_instance_methods(true).include?("private_foo"), true)
306
+ assert(Foo.protected_instance_methods(true).include?("protected_foo"), true)
307
+ end
308
+
309
+ module Private_Proteced_Inheritance
310
+ class Foo
311
+ def public_foo; end
312
+ def private_foo; end
313
+ def protected_foo; end
314
+ private :public_foo
315
+ protected :private_foo
316
+ end
317
+
318
+ module Bar
319
+ def public_foo; end
320
+ def private_foo; end
321
+ def protected_foo; end
322
+ end
323
+
324
+ class Baz < Foo
325
+ def public_foo; end
326
+ def private_foo; end
327
+ def protected_foo; end
328
+ private :private_foo
329
+ protected :protected_foo
330
+ end
331
+
332
+ if RUBY_VERSION >= "1.7.0"
333
+ Baz.import_module(Bar) do
334
+ assert(Baz.public_instance_methods(true).include?("public_foo"), true)
335
+ assert(Baz.private_instance_methods(true).include?("public_foo"), false)
336
+ assert(Baz.protected_instance_methods(true).include?("public_foo"), false)
337
+ assert(Baz.public_instance_methods(true).include?("private_foo"), false)
338
+ assert(Baz.private_instance_methods(true).include?("private_foo"), true)
339
+ assert(Baz.protected_instance_methods(true).include?("private_foo"), false)
340
+ assert(Baz.public_instance_methods(true).include?("protected_foo"), false)
341
+ assert(Baz.public_instance_methods(true).include?("protected_foo"), false)
342
+ assert(Baz.protected_instance_methods(true).include?("protected_foo"), true)
343
+ end
344
+ assert(Baz.public_instance_methods(true).include?("public_foo"), true)
345
+ assert(Baz.private_instance_methods(true).include?("private_foo"), true)
346
+ assert(Baz.protected_instance_methods(true).include?("protected_foo"), true)
347
+ end
348
+ end
349
+
350
+ module Private_Proteced_Inheritance
351
+ class Foo
352
+ def public_foo; end
353
+ def private_foo; end
354
+ def protected_foo; end
355
+ private :private_foo
356
+ protected :protected_foo
357
+ end
358
+
359
+ module Bar
360
+ def public_foo; end
361
+ def private_foo; end
362
+ def protected_foo; end
363
+ private :public_foo
364
+ protected :private_foo
365
+ end
366
+
367
+ class Baz < Foo
368
+ end
369
+
370
+ if RUBY_VERSION >= "1.7.0"
371
+ Baz.import_module(Bar) do
372
+ assert(Baz.public_instance_methods(true).include?("public_foo"), true)
373
+ assert(Baz.private_instance_methods(true).include?("public_foo"), false)
374
+ assert(Baz.protected_instance_methods(true).include?("public_foo"), false)
375
+ assert(Baz.public_instance_methods(true).include?("private_foo"), false)
376
+ assert(Baz.private_instance_methods(true).include?("private_foo"), true)
377
+ assert(Baz.protected_instance_methods(true).include?("private_foo"), false)
378
+ assert(Baz.public_instance_methods(true).include?("protected_foo"), false)
379
+ assert(Baz.public_instance_methods(true).include?("protected_foo"), false)
380
+ assert(Baz.protected_instance_methods(true).include?("protected_foo"), true)
381
+ end
382
+ assert(Baz.public_instance_methods(true).include?("public_foo"), true)
383
+ assert(Baz.private_instance_methods(true).include?("private_foo"), true)
384
+ assert(Baz.protected_instance_methods(true).include?("protected_foo"), true)
385
+ end
386
+ end
387
+
388
+ #unless single_thread_mode?
389
+ ## assert(C0m_n.instance_methods.size, 5)
390
+ ## assert(C0m_n.private_instance_methods.size, 1)
391
+ #p C0m_n.instance_methods
392
+ #p C0m_n.private_instance_methods
393
+ #else
394
+ ## assert(C0m_n.instance_methods.size, 2+1)
395
+ ## assert(C0m_n.private_instance_methods.size, 1+1)
396
+ #end
397
+
398
+ ### triple
399
+ module Triple
400
+ class F0
401
+ def f; 0; end
402
+ def g; 0; end
403
+ def h; 0; end
404
+ end
405
+ module F1
406
+ def f; 1; end
407
+ def g; 1; end
408
+ end
409
+ module F2
410
+ def g; 2; end
411
+ def h; 2; end
412
+ end
413
+ o = F0.new
414
+ F0.import_module(F1) do
415
+ assert([o.f, o.g, o.h], [1, 1, 0])
416
+ F0.import_module(F2) do
417
+ assert([o.f, o.g, o.h], [1, 2, 2])
418
+ end
419
+ assert([o.f, o.g, o.h], [1, 1, 0])
420
+ end
421
+ assert([o.f, o.g, o.h], [0, 0, 0])
422
+ end
423
+
424
+ # Deep Nesting 1
425
+ module DeepNesting1
426
+ module M031
427
+ def m; 1; end
428
+ end
429
+ module M032
430
+ def m; 2; end
431
+ end
432
+ class C030
433
+ def m; 0; end
434
+ end
435
+ o = C030.new
436
+ C030.import_module(M031) do
437
+ C030.import_module(M032) do
438
+ end
439
+ end
440
+ assert(o.m, 0)
441
+ C030.import_module(M031) do
442
+ assert(o.m, 1)
443
+ end
444
+ end
445
+
446
+ # Deep Nesting 2
447
+ module DeepNesting2
448
+ module M0mn
449
+ def m; 0; end
450
+ def n; 0; end
451
+ end
452
+ module M1mn
453
+ def m; 1; end
454
+ def n; 1; end
455
+ end
456
+ module M2mn
457
+ def m; 2; end
458
+ def n; 2; end
459
+ end
460
+ module M3mn
461
+ def m; 3; end
462
+ def n; 3; end
463
+ end
464
+ class DM0mn
465
+ include M0mn
466
+ end
467
+ o = DM0mn.new
468
+ DM0mn.import_module(M1mn) do
469
+ DM0mn.import_module(M2mn) do
470
+ assert(o.m, 2)
471
+ assert(o.n, 2)
472
+ end
473
+ assert(o.m, 1)
474
+ assert(o.n, 1)
475
+ end
476
+ assert(o.m, 0)
477
+ assert(o.n, 0)
478
+
479
+ DM0mn.import_module(M1mn) do
480
+ assert(o.m, 1)
481
+ assert(o.n, 1)
482
+ DM0mn.import_module(M2mn) do
483
+ assert(o.m, 2)
484
+ assert(o.n, 2)
485
+ DM0mn.import_module(M0mn) do
486
+ assert(o.m, 0)
487
+ assert(o.n, 0)
488
+ end
489
+ assert(o.m, 2)
490
+ assert(o.n, 2)
491
+ DM0mn.import_module(M3mn) do
492
+ assert(o.m, 3)
493
+ assert(o.n, 3)
494
+ end
495
+ assert(o.m, 2)
496
+ assert(o.n, 2)
497
+ end
498
+ assert(o.m, 1)
499
+ assert(o.n, 1)
500
+ DM0mn.import_module(M3mn) do
501
+ assert(o.m, 3)
502
+ assert(o.n, 3)
503
+ end
504
+ assert(o.m, 1)
505
+ assert(o.n, 1)
506
+ end
507
+ assert(o.m, 0)
508
+ assert(o.n, 0)
509
+ #assert(DM0mn.instance_methods.sort, ["m", "n"])
510
+ end
511
+
512
+ # Singleton Method
513
+ module SingletonMethod
514
+ class Foo
515
+ def m; 0; end
516
+ end
517
+ module Bar
518
+ def m; 1; end
519
+ end
520
+ o0 = Foo.new
521
+ o1 = Foo.new
522
+ o0.import(Bar) do
523
+ assert(o0.m, 1) unless $UNBOUND
524
+ assert(o1.m, 0) unless $UNBOUND
525
+ end
526
+ end
527
+
528
+ module SingletonMethod2
529
+ module Mm0
530
+ def self.m; 0; end
531
+ end
532
+ module Mm4
533
+ def m; 4; end
534
+ end
535
+ assert(Mm0.m, 0)
536
+ Mm0.import(Mm4) do
537
+ assert(Mm0.m, 4) unless $UNBOUND
538
+ end
539
+ assert(Mm0.m, 0)
540
+ end
541
+
542
+ ##### SUPER
543
+ module Super
544
+ module MB0
545
+ set_orig_method :_f, :f
546
+ def f;[_f, 0]; end
547
+ end
548
+ module MB1
549
+ include MB0
550
+ def f;[super, 1]; end
551
+ end
552
+ module MB2
553
+ include MB1
554
+ def f; [super, 2]; end
555
+ end
556
+
557
+ class BB
558
+ def f; 0; end
559
+ end
560
+ class FB < BB
561
+ include MB2
562
+ def f; -1; end
563
+ end
564
+ o = FB.new
565
+
566
+ FB.import_module(MB2) do
567
+ assert(o.f, [[[-1, 0], 1], 2])
568
+ end
569
+ end
570
+
571
+
572
+ module Super2
573
+ module Each_Index
574
+ set_orig_method :_each, :each
575
+ def each(&b)
576
+ i = 0
577
+ _each do |x|
578
+ yield(x, 2 * i)
579
+ i += 1
580
+ end
581
+ end
582
+ end
583
+
584
+ # mapmap
585
+ # assert([10, 11, 12].import(Each_Index) {|s| s.map{|x| x}},
586
+ # [[10, 0], [11, 2], [12, 4]]) unless $UNBOUND
587
+ assert([10, 11, 12].map{|x| x}, [10, 11, 12]) unless $UNBOUND
588
+
589
+ module Each_Char
590
+ def each(&b); split(//).each(&b); end
591
+ end
592
+ assert("abc".import(Each_Char){|s| s.map{|x| x.succ}}.join(""),
593
+ "bcd") unless $UNBOUND
594
+ assert("abc".import(Each_Char){|s| s.map{|x| x.succ}}.join(""),
595
+ "bcd") unless $UNBOUND
596
+ end
597
+
598
+ module Super3
599
+ class FE
600
+ include Enumerable
601
+ def each
602
+ yield 10
603
+ yield 20
604
+ yield 30
605
+ end
606
+ end
607
+ module IndexedEach
608
+ set_orig_method :_each, :each
609
+ def each
610
+ i = 0
611
+ _each do |x|
612
+ i += 1
613
+ yield(i, x)
614
+ end
615
+ end
616
+ end
617
+ # module IndexedEach2
618
+ # def each
619
+ # i = 0
620
+ # super do |x|
621
+ # i += 1
622
+ # yield(2*i, x)
623
+ # end
624
+ # end
625
+ # end
626
+ foo = FE.new
627
+ FE.import_module(IndexedEach) do
628
+ assert(foo.to_a, [[1, 10], [2, 20], [3, 30]])
629
+ # FE.import_module(IndexedEach2) do
630
+ # assert(foo.to_a, [[2, [1, 10]], [4, [2, 20]], [6, [3, 30]]])
631
+ # end
632
+ # assert(foo.to_a, [[1, 10], [2, 20], [3, 30]])
633
+ end
634
+ end
635
+
636
+ ### Scope_module
637
+ module ScopeCreate
638
+ class A
639
+ def foo
640
+ 0
641
+ end
642
+ end
643
+ module M
644
+ def foo
645
+ 1
646
+ end
647
+ end
648
+ module N
649
+ def foo
650
+ 2
651
+ end
652
+ end
653
+
654
+ class SC0
655
+ def foo; 0; end
656
+ end
657
+ module SM1
658
+ def foo; 1; end
659
+ end
660
+ module SM2
661
+ def foo; 2; end
662
+ end
663
+ s1 = Import_Module::Scope.create(SC0, SM1)
664
+ s2 = Import_Module::Scope.create(SC0, SM2)
665
+ c = SC0.new
666
+ assert(c.foo, 0)
667
+ s1.activate do
668
+ assert(c.foo, 1)
669
+ s2.activate do
670
+ assert(c.foo, 2)
671
+ s1.activate do
672
+ assert(c.foo, 1)
673
+ end
674
+ assert(c.foo, 2)
675
+ end
676
+ assert(c.foo, 1)
677
+ end
678
+ assert(c.foo, 0)
679
+ end
680
+
681
+ ########################################################################
682
+ ################## Multi Thread ########################################
683
+ ########################################################################
684
+
685
+ if $single_thread_mode
686
+ puts "All tests (#$import_module) succeeded."
687
+ exit
688
+ end
689
+
690
+ puts "MULTI THREAD TEST"
691
+
692
+ # Multi Thread, Nesting
693
+ module MultiThreadNesting
694
+ module K1mn
695
+ def m; 1; end
696
+ def n; 1; end
697
+ end
698
+ module K2mn
699
+ def m; 2; end
700
+ def n; 2; end
701
+ end
702
+ module K3mn
703
+ def m; 3; end
704
+ def n; 3; end
705
+ end
706
+ class B0mn
707
+ def m; 0; end
708
+ def n; 0; end
709
+ end
710
+
711
+ thrs = []
712
+ o = B0mn.new
713
+ thrs << Thread.start do
714
+ assert(o.m, 0)
715
+ assert(o.n, 0)
716
+ B0mn.import_module(K1mn) do
717
+ assert(o.m, 1)
718
+ assert(o.n, 1)
719
+ end
720
+ assert(o.m, 0)
721
+ assert(o.n, 0)
722
+ B0mn.import_module(K2mn) do
723
+ assert(o.m, 2)
724
+ assert(o.n, 2)
725
+ end
726
+ assert(o.m, 0)
727
+ assert(o.n, 0)
728
+ thrs << Thread.start do
729
+ assert(o.m, 0)
730
+ assert(o.n, 0)
731
+ B0mn.import_module(K3mn) do
732
+ assert(o.m, 3)
733
+ assert(o.n, 3)
734
+ end
735
+ assert(o.m, 0)
736
+ assert(o.n, 0)
737
+ end
738
+ assert(o.m, 0)
739
+ assert(o.n, 0)
740
+ B0mn.import_module(K2mn) do
741
+ assert(o.m, 2)
742
+ assert(o.n, 2)
743
+ end
744
+ end
745
+ assert(o.m, 0)
746
+ assert(o.n, 0)
747
+ thrs.each do |thr| thr.join end
748
+ end
749
+
750
+ # Do Not Erase Me
751
+ module DoNotErace
752
+ class E0m
753
+ def m; 0; end
754
+ end
755
+ module L1m
756
+ def m; 1; end
757
+ end
758
+ o = E0m.new
759
+ thrs = []
760
+ E0m.import_module(L1m) do
761
+ thrs << Thread.new do
762
+ sleep 0.1
763
+ assert(o.m, 1)
764
+ end
765
+ end
766
+ assert(o.m, 0)
767
+ thrs.each do |th| th.join; end
768
+
769
+ class E2m
770
+ def m; 2; end
771
+ end
772
+ module L3m
773
+ def m; 3; end
774
+ end
775
+ o = E2m.new
776
+
777
+ thrs = []
778
+ thrs << Thread.new do
779
+ E2m.import_module(L3m) do
780
+ assert(o.m, 3)
781
+ end
782
+ end
783
+ assert(o.m, 2)
784
+ thrs.each do |th| th.join; end
785
+ end
786
+
787
+ # scopes in theads
788
+ module ScopesInThreads
789
+ class ST
790
+ def f
791
+ 0
792
+ end
793
+ end
794
+
795
+ module STM
796
+ module M
797
+ def f
798
+ 1
799
+ end
800
+ end
801
+ end
802
+ o = ST.new
803
+ thrs = []
804
+ 3.times do
805
+ thrs << Thread.start{
806
+ ST.import_module(STM::M) do
807
+ 3.times do
808
+ assert(o.f, 1)
809
+ end
810
+ end
811
+ }
812
+ end
813
+ thrs.each{|th| th.join}
814
+ end
815
+
816
+ # Various Timing
817
+ module VariousTiming
818
+ module Mf0
819
+ def f; 0; end
820
+ end
821
+ module Mf1
822
+ def f; 1; end
823
+ end
824
+ module Mf2
825
+ def f; 2; end
826
+ end
827
+ module Mf3
828
+ def f; 3; end
829
+ end
830
+ module Mf4
831
+ def f; 4; end
832
+ end
833
+ module Mf5
834
+ def f; 5; end
835
+ end
836
+ class CMf0
837
+ include Mf0
838
+ end
839
+ o = CMf0.new
840
+ [
841
+ [0.0, 0.0, 0.0, 0.0],
842
+ [0.01, 0.02, 0.0, 0.03],
843
+ [0.02, 0.0, 0.01, 0.0],
844
+ [0.02, 0.01, 0.01, 0.0],
845
+ [0.01, 0.01, 0.01, 0.0],
846
+ [0.01, 0.01, 0.0, 0.01],
847
+ [0.01, 0.0, 0.01, 0.01],
848
+ [0.0, 0.01, 0.01, 0.01],
849
+ [0.01, 0.01, 0.01, 0.01],
850
+ ].each do |a, b, c, d|
851
+ thrs = []
852
+ assert(o.f, 0)
853
+ thrs << Thread.start do
854
+ CMf0.import_module(Mf1) do
855
+ sleep a
856
+ assert(o.f, 1)
857
+ thrs << Thread.start do
858
+ assert(o.f, 1)
859
+ CMf0.import_module(Mf2) do
860
+ assert(o.f, 2)
861
+ thrs << Thread.start do
862
+ CMf0.import_module(Mf3) do
863
+ sleep b
864
+ assert(o.f, 3)
865
+ end
866
+ end
867
+ CMf0.import_module(Mf4) do
868
+ assert(o.f, 4)
869
+ end
870
+ end
871
+ end
872
+ sleep c
873
+ end
874
+ end
875
+ sleep d
876
+ assert(o.f, 0)
877
+ thrs.each do |th| th.join; end
878
+ end
879
+ end
880
+
881
+ # Bottom Scope in Deep Thread
882
+ module BottomScope
883
+ class CN0m
884
+ def m; 0; end
885
+ end
886
+ module N1m
887
+ def m; 1; end
888
+ end
889
+ module N2m
890
+ def m; 2; end
891
+ end
892
+
893
+ o = CN0m.new
894
+ thrs = []
895
+ thrs << Thread.new do
896
+ thrs << Thread.new do
897
+ thrs << Thread.new do
898
+ thrs << Thread.new do
899
+ CN0m.import_module(N1m) do
900
+ assert(o.m, 1)
901
+ end
902
+ end
903
+ end
904
+ sleep 0.1
905
+ CN0m.import_module(N2m) do
906
+ assert(o.m, 2)
907
+ end
908
+ end
909
+ end
910
+ assert(o.m, 0)
911
+ thrs.each do |th| th.join; end
912
+
913
+ # Many Thread
914
+ class B0m
915
+ def m; 0; end
916
+ end
917
+ module K1m
918
+ def m; 1; end
919
+ end
920
+ o = B0m.new
921
+ thrs = []
922
+ 100.times do |n|
923
+ thrs << Thread.start do
924
+ B0m.import_module(K1m) do
925
+ assert(o.m, 1) if n == 99
926
+ end
927
+ end
928
+ end
929
+ thrs.each do |thr|
930
+ thr.join
931
+ end
932
+ #puts B0m.instance_methods
933
+ assert(B0m.instance_methods(false).size, 2)
934
+ end
935
+
936
+ puts "All tests (#$import_module) succeeded."