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,31 @@
1
+
2
+ require 'test/unit'
3
+ require 'carat/nack'
4
+
5
+
6
+ class TC_Nack < Test::Unit::TestCase
7
+
8
+ def scalar( x )
9
+ if x.kind_of?(Enumerable)
10
+ return nack(ArgumentError, "Value cannot not be enumerable")
11
+ end
12
+ x
13
+ end
14
+
15
+ def test000
16
+ assert_equal( 1, scalar(1) )
17
+ end
18
+
19
+ def test001
20
+ assert_equal( nack, scalar([1,2]) )
21
+ end
22
+
23
+ def test002
24
+ assert_equal( 1, nail(scalar(1)) )
25
+ end
26
+
27
+ def test003
28
+ assert_raises(ArgumentError) { nail(scalar([1,2])) }
29
+ end
30
+
31
+ end
@@ -0,0 +1,19 @@
1
+
2
+ require 'test/unit'
3
+ require 'carat/nil-as-emptiness'
4
+
5
+
6
+ class TC_NilAsEmptiness < Test::Unit::TestCase
7
+
8
+ def test_emptiness
9
+ assert( nil.empty? )
10
+ assert_equal( 0.0, nil.to_f )
11
+ #assert_equal( false, nil.to_b )
12
+ assert_equal( nil, nil[:any] )
13
+ assert_equal( 0, nil.length )
14
+ assert_equal( 0, nil.size )
15
+ assert_equal( nil, nil.include?(:any) )
16
+ assert_equal( {}, nil.to_h )
17
+ end
18
+
19
+ end
@@ -0,0 +1,29 @@
1
+
2
+ require 'test/unit'
3
+ require 'carat/nil-comparable'
4
+
5
+ class Mock < String
6
+ include NilComparable
7
+ end
8
+
9
+
10
+ class TC_NilClass_Comparable < Test::Unit::TestCase
11
+
12
+ def test001
13
+ assert_equal( 0, nil <=> nil )
14
+ assert_equal( -1, nil <=> 4 )
15
+ assert_equal( -1, nil <=> "a" )
16
+ assert_equal( -1, nil <=> Object.new )
17
+ assert_equal( 0, nil.cmp(nil) )
18
+ assert( nil < 4 )
19
+ end
20
+
21
+ def test002
22
+ m = Mock.new("A")
23
+ assert_equal( 1, m <=> nil )
24
+ assert_equal( -1, m <=> "B" )
25
+ #assert_equal( 1, m.cmp(nil) )
26
+ assert( m > nil )
27
+ end
28
+
29
+ end
File without changes
@@ -0,0 +1,64 @@
1
+
2
+
3
+ require 'test/unit'
4
+ require 'carat/notcopyable'
5
+
6
+
7
+ # fixture
8
+
9
+ class Foo
10
+ include NotCopyable
11
+ end
12
+
13
+ class Bar < Foo
14
+ end
15
+
16
+ class Foo2
17
+ end
18
+
19
+
20
+ # test
21
+
22
+ class TC_NotCopyable < Test::Unit::TestCase
23
+
24
+ def test_dup
25
+ f = Foo.new
26
+ assert_raises(TypeError) do
27
+ g = f.dup
28
+ end
29
+ end
30
+
31
+ def test_dup_derived
32
+ f = Bar.new
33
+ assert_raises(TypeError) do
34
+ g = f.dup
35
+ end
36
+ end
37
+
38
+ def test_dup_okay
39
+ f = Foo2.new
40
+ g = f.dup
41
+ end
42
+
43
+ def test_clone
44
+ f = Foo.new
45
+ assert_raises(TypeError) do
46
+ g = f.clone
47
+ end
48
+ end
49
+
50
+ def test_clone_derived
51
+ f = Bar.new
52
+ assert_raises(TypeError) do
53
+ g = f.clone
54
+ end
55
+ end
56
+
57
+ def test_clone_okay
58
+ f = Foo2.new
59
+ g = f.clone
60
+ end
61
+
62
+ end
63
+
64
+
@@ -0,0 +1,36 @@
1
+
2
+ require 'test/unit'
3
+ require 'carat/orderedhash'
4
+
5
+
6
+ class TC_OrderedHash < Test::Unit::TestCase
7
+
8
+ def test01
9
+ hsh = OrderedHash.new
10
+ hsh['z'] = 1
11
+ hsh['a'] = 2
12
+ hsh['c'] = 3
13
+ assert_equal( ['z','a','c'], hsh.keys )
14
+ end
15
+
16
+ def test02
17
+ hsh = OrderedHash['z', 1, 'a', 2, 'c', 3]
18
+ assert_equal( ['z','a','c'], hsh.keys )
19
+ end
20
+
21
+ def test03
22
+ hsh = OrderedHash['a', 1, 'c', 2, 'z', 3]
23
+ assert( hsh.push('end', 15) )
24
+ assert_equal( 15, hsh['end'] )
25
+ assert( ! hsh.push('end', 30) )
26
+ assert( hsh.unshift('begin', 50) )
27
+ assert_equal( 50, hsh['begin'] )
28
+ assert( ! hsh.unshift('begin', 60) )
29
+ assert_equal( ["begin", "a", "c", "z", "end"], hsh.keys )
30
+ assert_equal( ["end", 15], hsh.pop )
31
+ assert_equal( ["begin", "a", "c", "z"], hsh.keys )
32
+ assert_equal( ["begin", 50], hsh.shift )
33
+ end
34
+
35
+ end
36
+
@@ -0,0 +1,31 @@
1
+
2
+
3
+ require 'test/unit'
4
+ require 'carat/ostructable'
5
+
6
+
7
+ # fixture
8
+
9
+ class Record
10
+ include OpenStructable
11
+ end
12
+
13
+
14
+ # test
15
+
16
+ class TC_OpenStructable < Test::Unit::TestCase
17
+
18
+ def test_record
19
+ record = nil
20
+ assert_nothing_raised {
21
+ record = Record.new
22
+ record.name = "John Smith"
23
+ record.age = 70
24
+ record.pension = 300
25
+ }
26
+ assert_equal( "John Smith", record.name )
27
+ assert_equal( 70, record.age )
28
+ assert_equal( nil, record.address )
29
+ end
30
+
31
+ end
@@ -0,0 +1,5 @@
1
+
2
+ require 'test/unit'
3
+ require 'carat/semaphore'
4
+
5
+ # TODO
@@ -0,0 +1,20 @@
1
+
2
+ require 'test/unit'
3
+ require 'carat/snapshot'
4
+
5
+
6
+ class TC_Snapshot < Test::Unit::TestCase
7
+
8
+ def setup
9
+ customer = Struct.new("Customer", :name, :address, :zip)
10
+ joe = customer.new( "Joe Pitare", "1115 Lila Ln.", 47634 )
11
+ @joe_snap = joe.take_snapshot
12
+ end
13
+
14
+ def test_storage
15
+ assert_equal( "Joe Pitare", @joe_snap[:name] )
16
+ assert_equal( "1115 Lila Ln.", @joe_snap[:address] )
17
+ assert_equal( 47634, @joe_snap[:zip] )
18
+ end
19
+
20
+ end
@@ -0,0 +1,19 @@
1
+
2
+ require 'test/unit'
3
+ require 'carat/soundex'
4
+
5
+
6
+ class TC_Soundex < Test::Unit::TestCase
7
+
8
+ TESTVEC = "Euler Ellery Gauss Ghosh Hilbert Heilbronn Knuth Kant Lloyd Ladd Lukasiewicz Lissajous".split(" ")
9
+ RESVEC = "E460 E460 G200 G200 H416 H416 K530 K530 L300 L300 L222 L222".split(" ")
10
+
11
+ def test_soundex
12
+ TESTVEC.each_with_index {|str,i|
13
+ res = Text::Soundex.soundex(str)
14
+ #print "#{str.ljust(11)} => #{res} ... "
15
+ assert_equal( RESVEC[i], res )
16
+ }
17
+ end
18
+
19
+ end
@@ -0,0 +1,313 @@
1
+
2
+ require "test/unit"
3
+ require "carat/sstruct"
4
+
5
+
6
+ class TC_SuperStruct < Test::Unit::TestCase
7
+
8
+ def test001
9
+ # Must pass in String or Symbol
10
+ assert_raises(ArgumentError) { SuperStruct.new(0) }
11
+ end
12
+
13
+ def test002
14
+ # Must pass in valid name(s)
15
+ assert_raises(ArgumentError) { SuperStruct.new("###") }
16
+ end
17
+
18
+ def test003
19
+ # Can't assign to nonexistent fields
20
+ myStruct = SuperStruct.new
21
+ assert_raises(ArgumentError) { myStruct.new(345) }
22
+ end
23
+
24
+ def test004
25
+ # Need not assign to existing fields (default to nil)
26
+ myStruct = SuperStruct.new(:alpha)
27
+ assert_nothing_raised(ArgumentError) { myStruct.new }
28
+ end
29
+
30
+ def test005
31
+ # A value assigned at construction may be retrieved
32
+ myStruct = SuperStruct.new(:alpha)
33
+ x = myStruct.new(234)
34
+ assert(x.alpha == 234)
35
+ end
36
+
37
+ def test006
38
+ # Unassigned fields are nil
39
+ myStruct = SuperStruct.new(:alpha,:beta)
40
+ x = myStruct.new(234)
41
+ assert(x.beta == nil)
42
+ end
43
+
44
+ def test007
45
+ # An open structure still may not construct with nonexistent fields
46
+ myStruct = SuperStruct.open
47
+ assert_raises(ArgumentError) { x = myStruct.new(234) }
48
+ end
49
+
50
+ def test008
51
+ # An open structure may assign fields not previously existing
52
+ myStruct = SuperStruct.open
53
+ x = myStruct.new
54
+ assert_nothing_raised { x.foobar = 123 }
55
+ end
56
+
57
+ def test009
58
+ # A field assigned to an open struct after its construction may be retrieved
59
+ myStruct = SuperStruct.open
60
+ x = myStruct.new
61
+ x.foobar = 123
62
+ assert(x.foobar == 123)
63
+ end
64
+
65
+ def test010
66
+ # The act of retrieving a nonexistent field from an open struct will
67
+ # create that field
68
+ myStruct = SuperStruct.open
69
+ x = myStruct.new
70
+ assert_nothing_raised { y = x.foobar }
71
+ end
72
+
73
+ def test011
74
+ # A field (in an open struct) that is unassigned will be nil
75
+ myStruct = SuperStruct.open
76
+ x = myStruct.new
77
+ y = x.foobar
78
+ assert(y == nil)
79
+ end
80
+
81
+ def test012
82
+ # A struct created with new rather than open cannot reference nonexistent
83
+ # fields
84
+ myStruct = SuperStruct.new
85
+ x = myStruct.new
86
+ assert_raises(NoMethodError) { y = x.foobar }
87
+ end
88
+
89
+ def test013
90
+ # Adding a field to a struct will create a writer and reader for that field
91
+ myStruct = SuperStruct.new(:alpha)
92
+ x = myStruct.new
93
+ x.send(:alpha=,1)
94
+ assert(x.alpha == 1)
95
+ end
96
+
97
+ def test014
98
+ # Only a single value may be passed to a writer (for code coverage)
99
+ myStruct = SuperStruct.new(:alpha)
100
+ x = myStruct.new
101
+ assert_raises(ArgumentError) { x.send(:alpha=,1,2) }
102
+ end
103
+
104
+ def test015
105
+ # An open struct will also create a writer and a reader together
106
+ myStruct = SuperStruct.open
107
+ x = myStruct.new
108
+ x.send(:alpha=,1)
109
+ assert(x.alpha == 1)
110
+ end
111
+
112
+ def test016
113
+ # Only a single value may be passed to a writer (for code coverage)
114
+ myStruct = SuperStruct.open
115
+ x = myStruct.new
116
+ assert_raises(ArgumentError) { x.send(:alpha=,1,2) }
117
+ end
118
+
119
+ def test017
120
+ # A field has a real writer and reader corresponding to it
121
+ myStruct = SuperStruct.new(:alpha)
122
+ x = myStruct.new
123
+ assert(myStruct.instance_methods.include?("alpha"))
124
+ assert(myStruct.instance_methods.include?("alpha="))
125
+ end
126
+
127
+ def test018
128
+ # Creating a field by retrieval in an open struct will NOT create a writer
129
+ # (This behavior has changed!)
130
+ myStruct = SuperStruct.open
131
+ x = myStruct.new
132
+ y = x.alpha
133
+ assert(myStruct.instance_methods.include?("alpha"))
134
+ assert(!myStruct.instance_methods.include?("alpha="))
135
+ end
136
+
137
+ def test019
138
+ # Creating a field by writing in an open struct will NOT create a reader
139
+ # (This behavior has changed!)
140
+ myStruct = SuperStruct.open
141
+ x = myStruct.new
142
+ x.alpha = 5
143
+ assert(myStruct.instance_methods.include?("alpha="))
144
+ assert(!myStruct.instance_methods.include?("alpha"))
145
+ end
146
+
147
+ def test020
148
+ # A string will work as well as a symbol
149
+ myStruct = SuperStruct.new("alpha")
150
+ x = myStruct.new
151
+ assert(myStruct.instance_methods.include?("alpha"))
152
+ assert(myStruct.instance_methods.include?("alpha="))
153
+ end
154
+
155
+ def test021
156
+ # to_a will return an array of values
157
+ myStruct = SuperStruct.new("alpha","beta","gamma")
158
+ x = myStruct.new(7,8,9)
159
+ assert(x.to_a == [7,8,9])
160
+ end
161
+
162
+ def test022
163
+ # Instance method 'members' will return a list of members (as strings)
164
+ myStruct = SuperStruct.new(:alpha,"beta")
165
+ x = myStruct.new
166
+ assert_equal(["alpha","beta"],x.members)
167
+ end
168
+
169
+ def test023
170
+ # Class method 'members' will return a list of members (as strings)
171
+ myStruct = SuperStruct.new(:alpha,"beta")
172
+ assert_equal(["alpha","beta"],myStruct.members)
173
+ end
174
+
175
+ def test024
176
+ # to_ary will allow a struct to be treated like an array in
177
+ # multiple assignment
178
+ myStruct = SuperStruct.new("alpha","beta","gamma")
179
+ x = myStruct.new(7,8,9)
180
+ a,b,c = x
181
+ assert(b == 8)
182
+ end
183
+
184
+ def aux025(*arr) # Just used in test 25
185
+ arr[1]
186
+ end
187
+
188
+ def test025
189
+ # to_ary will allow a struct to be treated like an array in
190
+ # passed parameters
191
+ myStruct = SuperStruct.new("alpha","beta","gamma")
192
+ x = myStruct.new(7,8,9)
193
+ b = aux025(*x)
194
+ assert(b == 8)
195
+ end
196
+
197
+ def test026
198
+ # to_hash will return a hash with fields as keys
199
+ myStruct = SuperStruct.new("alpha","beta","gamma")
200
+ x = myStruct.new(7,8,9)
201
+ h = x.to_hash
202
+ assert_equal({"alpha"=>7,"beta"=>8,"gamma"=>9},h)
203
+ end
204
+
205
+ def test027
206
+ # A field name (String) may be used in a hash-like notation
207
+ myStruct = SuperStruct.new("alpha","beta","gamma")
208
+ x = myStruct.new(7,8,9)
209
+ y = x["beta"]
210
+ assert(8,y)
211
+ end
212
+
213
+ def test028
214
+ # A field name (Symbol) may be used in a hash-like notation
215
+ myStruct = SuperStruct.new("alpha","beta","gamma")
216
+ x = myStruct.new(7,8,9)
217
+ y = x[:beta]
218
+ assert(8,y)
219
+ end
220
+
221
+ def test029
222
+ # [offset,length] may be used as for arrays
223
+ myStruct = SuperStruct.new("alpha","beta","gamma")
224
+ x = myStruct.new(7,8,9)
225
+ y = x[0,2]
226
+ assert([7,8],y)
227
+ end
228
+
229
+ def test030
230
+ # Ranges may be used as for arrays
231
+ myStruct = SuperStruct.new("alpha","beta","gamma")
232
+ x = myStruct.new(7,8,9)
233
+ y = x[1..2]
234
+ assert([8,9],y)
235
+ end
236
+
237
+ def test031
238
+ # Adding a field to an open struct adds it to the instance
239
+ myStruct = SuperStruct.open(:alpha)
240
+ x = myStruct.new
241
+ x.beta = 5
242
+ assert_equal(["alpha","beta"],x.members)
243
+ end
244
+
245
+ def test032
246
+ # Adding a field to an open struct adds it to the class also
247
+ myStruct = SuperStruct.open(:alpha)
248
+ x = myStruct.new
249
+ x.beta = 5
250
+ assert_equal(["alpha","beta"],myStruct.members)
251
+ end
252
+
253
+ def test033
254
+ # An array passed to SuperStruct.new need not be starred
255
+ myStruct = SuperStruct.new(%w[alpha beta gamma])
256
+ x = myStruct.new
257
+ assert_equal(%w[alpha beta gamma],x.members)
258
+ end
259
+
260
+ def xtest034
261
+ # A hash passed to SuperStruct.new will initialize the values
262
+ # (but order will not be predictable!)
263
+ assert false, "Not implemented yet."
264
+ end
265
+
266
+ def test035
267
+ # A hash passed to #set will set multiple values at once
268
+ myStruct = SuperStruct.new(%w[alpha beta gamma])
269
+ x = myStruct.new
270
+ hash = {"alpha"=>234,"beta"=>345,"gamma"=>456}
271
+ x.set(hash)
272
+ assert_equal([234,345,456], x.to_a)
273
+ end
274
+
275
+ def test036
276
+ # Make sure ||= works properly
277
+ x = SuperStruct.open.new
278
+ x.foo ||= 333
279
+ x.bar = x.bar || 444
280
+ assert_equal(333,x.foo)
281
+ assert_equal(444,x.bar)
282
+ end
283
+
284
+ def test037
285
+ # A simple array index works ok
286
+ myStruct = SuperStruct.new("alpha","beta","gamma")
287
+ x = myStruct.new(7,8,9)
288
+ assert_equal(7,x[0])
289
+ assert_equal(8,x[1])
290
+ assert_equal(9,x[2])
291
+ end
292
+
293
+ def test038
294
+ # attr_tester will create a ?-method
295
+ klass = SuperStruct.new(:alpha,:beta,:gamma)
296
+ klass.attr_tester :alpha, :gamma
297
+ x = klass.new(22,33,nil)
298
+ assert(x.alpha?)
299
+ assert_raises(NoMethodError) { x.beta? }
300
+ assert(! x.gamma?)
301
+ end
302
+
303
+ def test039
304
+ # attr_tester works with open() (?-methods not created)
305
+ klass = SuperStruct.open(:alpha,:beta,:gamma)
306
+ klass.attr_tester :alpha, :gamma
307
+ x = klass.new(22,33,nil)
308
+ assert(x.alpha?)
309
+ assert_raises(NoMethodError) { x.beta? } # ?-methods are not automatic
310
+ assert(! x.gamma?)
311
+ end
312
+
313
+ end