nudge 0.0.1

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 (584) hide show
  1. data/.gitignore +5 -0
  2. data/LICENSE.txt +21 -0
  3. data/Rakefile +23 -0
  4. data/VERSION +1 -0
  5. data/_spikes/couch_document_spike.rb +24 -0
  6. data/_spikes/nested_parsing/nested.rb +0 -0
  7. data/_spikes/nested_parsing/nested.treetop +6 -0
  8. data/_spikes/nudgeview/init.rb +19 -0
  9. data/_spikes/nudgeview/public/javascripts/app.js +12 -0
  10. data/_spikes/nudgeview/public/javascripts/jquery.js +4376 -0
  11. data/_spikes/nudgeview/public/javascripts/jquery.svg.js +1325 -0
  12. data/_spikes/nudgeview/views/index.erb +18 -0
  13. data/_spikes/nudgeview/views/index.haml +8 -0
  14. data/_spikes/simplestWeb/simplest.rb +44 -0
  15. data/_spikes/simplestWeb/views/main.erb +19 -0
  16. data/_spikes/sketches/nudgecode_spike.rb +146 -0
  17. data/_spikes/sketches/searchDSL_spike.rb +25 -0
  18. data/_spikes/sketches/search_operator_sketch_spike.txt +287 -0
  19. data/_spikes/sketches/searchspace_spike.rb +96 -0
  20. data/_spikes/symbolic_regression/activate.rb +35 -0
  21. data/_spikes/symbolic_regression/config/environment.rb +340 -0
  22. data/_spikes/symbolic_regression/config/environments/deployment.rb +0 -0
  23. data/_spikes/symbolic_regression/config/environments/development.rb +0 -0
  24. data/_spikes/symbolic_regression/experiment/objectives/programLength.rb +2 -0
  25. data/_spikes/symbolic_regression/experiment/objectives/summedSquaredError.rb +2 -0
  26. data/_spikes/symbolic_regression/lib/tasks/run.rake +0 -0
  27. data/doc/classes/BlockNode.html +146 -0
  28. data/doc/classes/BlockNode.src/M000246.html +18 -0
  29. data/doc/classes/BoolAndInstruction.html +218 -0
  30. data/doc/classes/BoolAndInstruction.src/M000003.html +15 -0
  31. data/doc/classes/BoolAndInstruction.src/M000004.html +16 -0
  32. data/doc/classes/BoolAndInstruction.src/M000005.html +15 -0
  33. data/doc/classes/BoolAndInstruction.src/M000006.html +15 -0
  34. data/doc/classes/BoolEqualQInstruction.html +218 -0
  35. data/doc/classes/BoolEqualQInstruction.src/M000015.html +15 -0
  36. data/doc/classes/BoolEqualQInstruction.src/M000016.html +16 -0
  37. data/doc/classes/BoolEqualQInstruction.src/M000017.html +15 -0
  38. data/doc/classes/BoolEqualQInstruction.src/M000018.html +15 -0
  39. data/doc/classes/BoolFromFloatInstruction.html +218 -0
  40. data/doc/classes/BoolFromFloatInstruction.src/M000071.html +15 -0
  41. data/doc/classes/BoolFromFloatInstruction.src/M000072.html +15 -0
  42. data/doc/classes/BoolFromFloatInstruction.src/M000073.html +15 -0
  43. data/doc/classes/BoolFromFloatInstruction.src/M000074.html +15 -0
  44. data/doc/classes/BoolFromIntInstruction.html +218 -0
  45. data/doc/classes/BoolFromIntInstruction.src/M000067.html +15 -0
  46. data/doc/classes/BoolFromIntInstruction.src/M000068.html +15 -0
  47. data/doc/classes/BoolFromIntInstruction.src/M000069.html +15 -0
  48. data/doc/classes/BoolFromIntInstruction.src/M000070.html +15 -0
  49. data/doc/classes/BoolNotInstruction.html +218 -0
  50. data/doc/classes/BoolNotInstruction.src/M000019.html +15 -0
  51. data/doc/classes/BoolNotInstruction.src/M000020.html +15 -0
  52. data/doc/classes/BoolNotInstruction.src/M000021.html +15 -0
  53. data/doc/classes/BoolNotInstruction.src/M000022.html +15 -0
  54. data/doc/classes/BoolOrInstruction.html +218 -0
  55. data/doc/classes/BoolOrInstruction.src/M000007.html +15 -0
  56. data/doc/classes/BoolOrInstruction.src/M000008.html +16 -0
  57. data/doc/classes/BoolOrInstruction.src/M000009.html +15 -0
  58. data/doc/classes/BoolOrInstruction.src/M000010.html +15 -0
  59. data/doc/classes/BoolRandomInstruction.html +218 -0
  60. data/doc/classes/BoolRandomInstruction.src/M000187.html +15 -0
  61. data/doc/classes/BoolRandomInstruction.src/M000188.html +14 -0
  62. data/doc/classes/BoolRandomInstruction.src/M000189.html +15 -0
  63. data/doc/classes/BoolRandomInstruction.src/M000190.html +15 -0
  64. data/doc/classes/BoolType.html +196 -0
  65. data/doc/classes/BoolType.src/M000240.html +16 -0
  66. data/doc/classes/BoolType.src/M000241.html +15 -0
  67. data/doc/classes/BoolType.src/M000242.html +15 -0
  68. data/doc/classes/BoolXorInstruction.html +218 -0
  69. data/doc/classes/BoolXorInstruction.src/M000011.html +15 -0
  70. data/doc/classes/BoolXorInstruction.src/M000012.html +16 -0
  71. data/doc/classes/BoolXorInstruction.src/M000013.html +15 -0
  72. data/doc/classes/BoolXorInstruction.src/M000014.html +15 -0
  73. data/doc/classes/ChannelNode.html +161 -0
  74. data/doc/classes/ChannelNode.src/M000249.html +15 -0
  75. data/doc/classes/ChannelNode.src/M000250.html +16 -0
  76. data/doc/classes/CodeType.html +269 -0
  77. data/doc/classes/CodeType.src/M000219.html +38 -0
  78. data/doc/classes/CodeType.src/M000220.html +16 -0
  79. data/doc/classes/CodeType.src/M000221.html +16 -0
  80. data/doc/classes/CodeType.src/M000222.html +16 -0
  81. data/doc/classes/CodeType.src/M000223.html +24 -0
  82. data/doc/classes/CodeType.src/M000224.html +42 -0
  83. data/doc/classes/ERCNode.html +183 -0
  84. data/doc/classes/ERCNode.src/M000254.html +15 -0
  85. data/doc/classes/ERCNode.src/M000255.html +16 -0
  86. data/doc/classes/ERCNode.src/M000256.html +16 -0
  87. data/doc/classes/ExecPopInstruction.html +218 -0
  88. data/doc/classes/ExecPopInstruction.src/M000075.html +15 -0
  89. data/doc/classes/ExecPopInstruction.src/M000076.html +14 -0
  90. data/doc/classes/ExecPopInstruction.src/M000077.html +15 -0
  91. data/doc/classes/ExecPopInstruction.src/M000078.html +14 -0
  92. data/doc/classes/FloatAbsInstruction.html +218 -0
  93. data/doc/classes/FloatAbsInstruction.src/M000107.html +15 -0
  94. data/doc/classes/FloatAbsInstruction.src/M000108.html +15 -0
  95. data/doc/classes/FloatAbsInstruction.src/M000109.html +15 -0
  96. data/doc/classes/FloatAbsInstruction.src/M000110.html +15 -0
  97. data/doc/classes/FloatAddInstruction.html +218 -0
  98. data/doc/classes/FloatAddInstruction.src/M000079.html +15 -0
  99. data/doc/classes/FloatAddInstruction.src/M000080.html +16 -0
  100. data/doc/classes/FloatAddInstruction.src/M000081.html +15 -0
  101. data/doc/classes/FloatAddInstruction.src/M000082.html +15 -0
  102. data/doc/classes/FloatCosineInstruction.html +218 -0
  103. data/doc/classes/FloatCosineInstruction.src/M000123.html +15 -0
  104. data/doc/classes/FloatCosineInstruction.src/M000124.html +15 -0
  105. data/doc/classes/FloatCosineInstruction.src/M000125.html +15 -0
  106. data/doc/classes/FloatCosineInstruction.src/M000126.html +15 -0
  107. data/doc/classes/FloatDivideInstruction.html +218 -0
  108. data/doc/classes/FloatDivideInstruction.src/M000091.html +15 -0
  109. data/doc/classes/FloatDivideInstruction.src/M000092.html +16 -0
  110. data/doc/classes/FloatDivideInstruction.src/M000093.html +20 -0
  111. data/doc/classes/FloatDivideInstruction.src/M000094.html +15 -0
  112. data/doc/classes/FloatFromBoolInstruction.html +218 -0
  113. data/doc/classes/FloatFromBoolInstruction.src/M000055.html +15 -0
  114. data/doc/classes/FloatFromBoolInstruction.src/M000056.html +15 -0
  115. data/doc/classes/FloatFromBoolInstruction.src/M000057.html +15 -0
  116. data/doc/classes/FloatFromBoolInstruction.src/M000058.html +15 -0
  117. data/doc/classes/FloatFromIntInstruction.html +218 -0
  118. data/doc/classes/FloatFromIntInstruction.src/M000063.html +15 -0
  119. data/doc/classes/FloatFromIntInstruction.src/M000064.html +15 -0
  120. data/doc/classes/FloatFromIntInstruction.src/M000065.html +15 -0
  121. data/doc/classes/FloatFromIntInstruction.src/M000066.html +15 -0
  122. data/doc/classes/FloatGreaterThanQInstruction.html +218 -0
  123. data/doc/classes/FloatGreaterThanQInstruction.src/M000035.html +15 -0
  124. data/doc/classes/FloatGreaterThanQInstruction.src/M000036.html +16 -0
  125. data/doc/classes/FloatGreaterThanQInstruction.src/M000037.html +15 -0
  126. data/doc/classes/FloatGreaterThanQInstruction.src/M000038.html +15 -0
  127. data/doc/classes/FloatIfInstruction.html +218 -0
  128. data/doc/classes/FloatIfInstruction.src/M000047.html +16 -0
  129. data/doc/classes/FloatIfInstruction.src/M000048.html +15 -0
  130. data/doc/classes/FloatIfInstruction.src/M000049.html +14 -0
  131. data/doc/classes/FloatIfInstruction.src/M000050.html +17 -0
  132. data/doc/classes/FloatLessThanQInstruction.html +218 -0
  133. data/doc/classes/FloatLessThanQInstruction.src/M000039.html +15 -0
  134. data/doc/classes/FloatLessThanQInstruction.src/M000040.html +16 -0
  135. data/doc/classes/FloatLessThanQInstruction.src/M000041.html +15 -0
  136. data/doc/classes/FloatLessThanQInstruction.src/M000042.html +15 -0
  137. data/doc/classes/FloatMaxInstruction.html +218 -0
  138. data/doc/classes/FloatMaxInstruction.src/M000095.html +15 -0
  139. data/doc/classes/FloatMaxInstruction.src/M000096.html +16 -0
  140. data/doc/classes/FloatMaxInstruction.src/M000097.html +15 -0
  141. data/doc/classes/FloatMaxInstruction.src/M000098.html +15 -0
  142. data/doc/classes/FloatMinInstruction.html +218 -0
  143. data/doc/classes/FloatMinInstruction.src/M000099.html +15 -0
  144. data/doc/classes/FloatMinInstruction.src/M000100.html +16 -0
  145. data/doc/classes/FloatMinInstruction.src/M000101.html +15 -0
  146. data/doc/classes/FloatMinInstruction.src/M000102.html +15 -0
  147. data/doc/classes/FloatMultiplyInstruction.html +218 -0
  148. data/doc/classes/FloatMultiplyInstruction.src/M000083.html +15 -0
  149. data/doc/classes/FloatMultiplyInstruction.src/M000084.html +16 -0
  150. data/doc/classes/FloatMultiplyInstruction.src/M000085.html +15 -0
  151. data/doc/classes/FloatMultiplyInstruction.src/M000086.html +15 -0
  152. data/doc/classes/FloatNegativeInstruction.html +218 -0
  153. data/doc/classes/FloatNegativeInstruction.src/M000103.html +15 -0
  154. data/doc/classes/FloatNegativeInstruction.src/M000104.html +15 -0
  155. data/doc/classes/FloatNegativeInstruction.src/M000105.html +15 -0
  156. data/doc/classes/FloatNegativeInstruction.src/M000106.html +15 -0
  157. data/doc/classes/FloatPowerInstruction.html +218 -0
  158. data/doc/classes/FloatPowerInstruction.src/M000111.html +15 -0
  159. data/doc/classes/FloatPowerInstruction.src/M000112.html +16 -0
  160. data/doc/classes/FloatPowerInstruction.src/M000113.html +20 -0
  161. data/doc/classes/FloatPowerInstruction.src/M000114.html +15 -0
  162. data/doc/classes/FloatRandomInstruction.html +218 -0
  163. data/doc/classes/FloatRandomInstruction.src/M000191.html +15 -0
  164. data/doc/classes/FloatRandomInstruction.src/M000192.html +14 -0
  165. data/doc/classes/FloatRandomInstruction.src/M000193.html +15 -0
  166. data/doc/classes/FloatRandomInstruction.src/M000194.html +15 -0
  167. data/doc/classes/FloatSineInstruction.html +218 -0
  168. data/doc/classes/FloatSineInstruction.src/M000119.html +15 -0
  169. data/doc/classes/FloatSineInstruction.src/M000120.html +15 -0
  170. data/doc/classes/FloatSineInstruction.src/M000121.html +15 -0
  171. data/doc/classes/FloatSineInstruction.src/M000122.html +15 -0
  172. data/doc/classes/FloatSqrtInstruction.html +218 -0
  173. data/doc/classes/FloatSqrtInstruction.src/M000115.html +15 -0
  174. data/doc/classes/FloatSqrtInstruction.src/M000116.html +15 -0
  175. data/doc/classes/FloatSqrtInstruction.src/M000117.html +19 -0
  176. data/doc/classes/FloatSqrtInstruction.src/M000118.html +15 -0
  177. data/doc/classes/FloatSubtractInstruction.html +218 -0
  178. data/doc/classes/FloatSubtractInstruction.src/M000087.html +15 -0
  179. data/doc/classes/FloatSubtractInstruction.src/M000088.html +16 -0
  180. data/doc/classes/FloatSubtractInstruction.src/M000089.html +15 -0
  181. data/doc/classes/FloatSubtractInstruction.src/M000090.html +15 -0
  182. data/doc/classes/FloatTangentInstruction.html +218 -0
  183. data/doc/classes/FloatTangentInstruction.src/M000127.html +15 -0
  184. data/doc/classes/FloatTangentInstruction.src/M000128.html +15 -0
  185. data/doc/classes/FloatTangentInstruction.src/M000129.html +15 -0
  186. data/doc/classes/FloatTangentInstruction.src/M000130.html +15 -0
  187. data/doc/classes/FloatType.html +196 -0
  188. data/doc/classes/FloatType.src/M000243.html +19 -0
  189. data/doc/classes/FloatType.src/M000244.html +15 -0
  190. data/doc/classes/FloatType.src/M000245.html +15 -0
  191. data/doc/classes/Helpers.html +161 -0
  192. data/doc/classes/Helpers.src/M000343.html +21 -0
  193. data/doc/classes/Helpers.src/M000344.html +24 -0
  194. data/doc/classes/Instruction/InstructionMethodError.html +110 -0
  195. data/doc/classes/Instruction/NaNResultError.html +110 -0
  196. data/doc/classes/Instruction/NotEnoughStackItems.html +110 -0
  197. data/doc/classes/Instruction.html +500 -0
  198. data/doc/classes/Instruction.src/M000131.html +17 -0
  199. data/doc/classes/Instruction.src/M000132.html +15 -0
  200. data/doc/classes/Instruction.src/M000133.html +15 -0
  201. data/doc/classes/Instruction.src/M000134.html +15 -0
  202. data/doc/classes/Instruction.src/M000135.html +15 -0
  203. data/doc/classes/Instruction.src/M000136.html +15 -0
  204. data/doc/classes/Instruction.src/M000137.html +15 -0
  205. data/doc/classes/Instruction.src/M000138.html +15 -0
  206. data/doc/classes/Instruction.src/M000139.html +22 -0
  207. data/doc/classes/Instruction.src/M000140.html +15 -0
  208. data/doc/classes/Instruction.src/M000141.html +25 -0
  209. data/doc/classes/Instruction.src/M000142.html +15 -0
  210. data/doc/classes/Instruction.src/M000143.html +15 -0
  211. data/doc/classes/Instruction.src/M000144.html +15 -0
  212. data/doc/classes/Instruction.src/M000145.html +15 -0
  213. data/doc/classes/Instruction.src/M000146.html +15 -0
  214. data/doc/classes/InstructionNode.html +161 -0
  215. data/doc/classes/InstructionNode.src/M000247.html +15 -0
  216. data/doc/classes/InstructionNode.src/M000248.html +16 -0
  217. data/doc/classes/IntAbsInstruction.html +218 -0
  218. data/doc/classes/IntAbsInstruction.src/M000175.html +15 -0
  219. data/doc/classes/IntAbsInstruction.src/M000176.html +15 -0
  220. data/doc/classes/IntAbsInstruction.src/M000177.html +15 -0
  221. data/doc/classes/IntAbsInstruction.src/M000178.html +15 -0
  222. data/doc/classes/IntAddInstruction.html +218 -0
  223. data/doc/classes/IntAddInstruction.src/M000147.html +15 -0
  224. data/doc/classes/IntAddInstruction.src/M000148.html +16 -0
  225. data/doc/classes/IntAddInstruction.src/M000149.html +15 -0
  226. data/doc/classes/IntAddInstruction.src/M000150.html +15 -0
  227. data/doc/classes/IntDepthInstruction.html +218 -0
  228. data/doc/classes/IntDepthInstruction.src/M000211.html +15 -0
  229. data/doc/classes/IntDepthInstruction.src/M000212.html +14 -0
  230. data/doc/classes/IntDepthInstruction.src/M000213.html +15 -0
  231. data/doc/classes/IntDepthInstruction.src/M000214.html +15 -0
  232. data/doc/classes/IntDivideInstruction.html +218 -0
  233. data/doc/classes/IntDivideInstruction.src/M000155.html +15 -0
  234. data/doc/classes/IntDivideInstruction.src/M000156.html +16 -0
  235. data/doc/classes/IntDivideInstruction.src/M000157.html +20 -0
  236. data/doc/classes/IntDivideInstruction.src/M000158.html +15 -0
  237. data/doc/classes/IntDuplicateInstruction.html +218 -0
  238. data/doc/classes/IntDuplicateInstruction.src/M000203.html +15 -0
  239. data/doc/classes/IntDuplicateInstruction.src/M000204.html +15 -0
  240. data/doc/classes/IntDuplicateInstruction.src/M000205.html +15 -0
  241. data/doc/classes/IntDuplicateInstruction.src/M000206.html +15 -0
  242. data/doc/classes/IntEqualQInstruction.html +218 -0
  243. data/doc/classes/IntEqualQInstruction.src/M000023.html +15 -0
  244. data/doc/classes/IntEqualQInstruction.src/M000024.html +16 -0
  245. data/doc/classes/IntEqualQInstruction.src/M000025.html +15 -0
  246. data/doc/classes/IntEqualQInstruction.src/M000026.html +15 -0
  247. data/doc/classes/IntFlushInstruction.html +218 -0
  248. data/doc/classes/IntFlushInstruction.src/M000215.html +15 -0
  249. data/doc/classes/IntFlushInstruction.src/M000216.html +14 -0
  250. data/doc/classes/IntFlushInstruction.src/M000217.html +14 -0
  251. data/doc/classes/IntFlushInstruction.src/M000218.html +15 -0
  252. data/doc/classes/IntFromBoolInstruction.html +218 -0
  253. data/doc/classes/IntFromBoolInstruction.src/M000051.html +15 -0
  254. data/doc/classes/IntFromBoolInstruction.src/M000052.html +15 -0
  255. data/doc/classes/IntFromBoolInstruction.src/M000053.html +15 -0
  256. data/doc/classes/IntFromBoolInstruction.src/M000054.html +15 -0
  257. data/doc/classes/IntFromFloatInstruction.html +218 -0
  258. data/doc/classes/IntFromFloatInstruction.src/M000059.html +15 -0
  259. data/doc/classes/IntFromFloatInstruction.src/M000060.html +15 -0
  260. data/doc/classes/IntFromFloatInstruction.src/M000061.html +15 -0
  261. data/doc/classes/IntFromFloatInstruction.src/M000062.html +15 -0
  262. data/doc/classes/IntGreaterThanQInstruction.html +218 -0
  263. data/doc/classes/IntGreaterThanQInstruction.src/M000031.html +15 -0
  264. data/doc/classes/IntGreaterThanQInstruction.src/M000032.html +16 -0
  265. data/doc/classes/IntGreaterThanQInstruction.src/M000033.html +15 -0
  266. data/doc/classes/IntGreaterThanQInstruction.src/M000034.html +15 -0
  267. data/doc/classes/IntIfInstruction.html +218 -0
  268. data/doc/classes/IntIfInstruction.src/M000043.html +16 -0
  269. data/doc/classes/IntIfInstruction.src/M000044.html +15 -0
  270. data/doc/classes/IntIfInstruction.src/M000045.html +14 -0
  271. data/doc/classes/IntIfInstruction.src/M000046.html +17 -0
  272. data/doc/classes/IntLessThanQInstruction.html +218 -0
  273. data/doc/classes/IntLessThanQInstruction.src/M000027.html +15 -0
  274. data/doc/classes/IntLessThanQInstruction.src/M000028.html +16 -0
  275. data/doc/classes/IntLessThanQInstruction.src/M000029.html +15 -0
  276. data/doc/classes/IntLessThanQInstruction.src/M000030.html +15 -0
  277. data/doc/classes/IntMaxInstruction.html +218 -0
  278. data/doc/classes/IntMaxInstruction.src/M000167.html +15 -0
  279. data/doc/classes/IntMaxInstruction.src/M000168.html +16 -0
  280. data/doc/classes/IntMaxInstruction.src/M000169.html +16 -0
  281. data/doc/classes/IntMaxInstruction.src/M000170.html +15 -0
  282. data/doc/classes/IntMinInstruction.html +218 -0
  283. data/doc/classes/IntMinInstruction.src/M000171.html +15 -0
  284. data/doc/classes/IntMinInstruction.src/M000172.html +16 -0
  285. data/doc/classes/IntMinInstruction.src/M000173.html +16 -0
  286. data/doc/classes/IntMinInstruction.src/M000174.html +15 -0
  287. data/doc/classes/IntModuloInstruction.html +218 -0
  288. data/doc/classes/IntModuloInstruction.src/M000163.html +15 -0
  289. data/doc/classes/IntModuloInstruction.src/M000164.html +16 -0
  290. data/doc/classes/IntModuloInstruction.src/M000165.html +20 -0
  291. data/doc/classes/IntModuloInstruction.src/M000166.html +15 -0
  292. data/doc/classes/IntMultiplyInstruction.html +218 -0
  293. data/doc/classes/IntMultiplyInstruction.src/M000151.html +15 -0
  294. data/doc/classes/IntMultiplyInstruction.src/M000152.html +16 -0
  295. data/doc/classes/IntMultiplyInstruction.src/M000153.html +15 -0
  296. data/doc/classes/IntMultiplyInstruction.src/M000154.html +15 -0
  297. data/doc/classes/IntNegativeInstruction.html +218 -0
  298. data/doc/classes/IntNegativeInstruction.src/M000179.html +15 -0
  299. data/doc/classes/IntNegativeInstruction.src/M000180.html +15 -0
  300. data/doc/classes/IntNegativeInstruction.src/M000181.html +15 -0
  301. data/doc/classes/IntNegativeInstruction.src/M000182.html +15 -0
  302. data/doc/classes/IntPopInstruction.html +218 -0
  303. data/doc/classes/IntPopInstruction.src/M000195.html +15 -0
  304. data/doc/classes/IntPopInstruction.src/M000196.html +15 -0
  305. data/doc/classes/IntPopInstruction.src/M000197.html +14 -0
  306. data/doc/classes/IntPopInstruction.src/M000198.html +14 -0
  307. data/doc/classes/IntRandomInstruction.html +218 -0
  308. data/doc/classes/IntRandomInstruction.src/M000183.html +15 -0
  309. data/doc/classes/IntRandomInstruction.src/M000184.html +14 -0
  310. data/doc/classes/IntRandomInstruction.src/M000185.html +15 -0
  311. data/doc/classes/IntRandomInstruction.src/M000186.html +15 -0
  312. data/doc/classes/IntRotateInstruction.html +218 -0
  313. data/doc/classes/IntRotateInstruction.src/M000207.html +15 -0
  314. data/doc/classes/IntRotateInstruction.src/M000208.html +17 -0
  315. data/doc/classes/IntRotateInstruction.src/M000209.html +14 -0
  316. data/doc/classes/IntRotateInstruction.src/M000210.html +17 -0
  317. data/doc/classes/IntSubtractInstruction.html +218 -0
  318. data/doc/classes/IntSubtractInstruction.src/M000159.html +15 -0
  319. data/doc/classes/IntSubtractInstruction.src/M000160.html +16 -0
  320. data/doc/classes/IntSubtractInstruction.src/M000161.html +16 -0
  321. data/doc/classes/IntSubtractInstruction.src/M000162.html +15 -0
  322. data/doc/classes/IntSwapInstruction.html +218 -0
  323. data/doc/classes/IntSwapInstruction.src/M000199.html +15 -0
  324. data/doc/classes/IntSwapInstruction.src/M000200.html +16 -0
  325. data/doc/classes/IntSwapInstruction.src/M000201.html +14 -0
  326. data/doc/classes/IntSwapInstruction.src/M000202.html +16 -0
  327. data/doc/classes/IntType.html +240 -0
  328. data/doc/classes/IntType.src/M000235.html +15 -0
  329. data/doc/classes/IntType.src/M000236.html +15 -0
  330. data/doc/classes/IntType.src/M000237.html +18 -0
  331. data/doc/classes/IntType.src/M000238.html +15 -0
  332. data/doc/classes/IntType.src/M000239.html +15 -0
  333. data/doc/classes/LiteralNode.html +183 -0
  334. data/doc/classes/LiteralNode.src/M000251.html +15 -0
  335. data/doc/classes/LiteralNode.src/M000252.html +16 -0
  336. data/doc/classes/LiteralNode.src/M000253.html +16 -0
  337. data/doc/classes/Nudge/Channel.html +437 -0
  338. data/doc/classes/Nudge/Channel.src/M000286.html +15 -0
  339. data/doc/classes/Nudge/Channel.src/M000287.html +19 -0
  340. data/doc/classes/Nudge/Channel.src/M000288.html +15 -0
  341. data/doc/classes/Nudge/Channel.src/M000289.html +15 -0
  342. data/doc/classes/Nudge/Channel.src/M000290.html +15 -0
  343. data/doc/classes/Nudge/Channel.src/M000291.html +19 -0
  344. data/doc/classes/Nudge/Channel.src/M000292.html +19 -0
  345. data/doc/classes/Nudge/Channel.src/M000293.html +17 -0
  346. data/doc/classes/Nudge/Channel.src/M000294.html +15 -0
  347. data/doc/classes/Nudge/Channel.src/M000295.html +20 -0
  348. data/doc/classes/Nudge/Channel.src/M000296.html +15 -0
  349. data/doc/classes/Nudge/Channel.src/M000297.html +17 -0
  350. data/doc/classes/Nudge/Channel.src/M000298.html +15 -0
  351. data/doc/classes/Nudge/CodeBlock.html +331 -0
  352. data/doc/classes/Nudge/CodeBlock.src/M000263.html +15 -0
  353. data/doc/classes/Nudge/CodeBlock.src/M000264.html +15 -0
  354. data/doc/classes/Nudge/CodeBlock.src/M000265.html +15 -0
  355. data/doc/classes/Nudge/CodeBlock.src/M000266.html +15 -0
  356. data/doc/classes/Nudge/CodeBlock.src/M000267.html +15 -0
  357. data/doc/classes/Nudge/CodeBlock.src/M000268.html +17 -0
  358. data/doc/classes/Nudge/CodeBlock.src/M000269.html +20 -0
  359. data/doc/classes/Nudge/CodeBlock.src/M000270.html +15 -0
  360. data/doc/classes/Nudge/CodeBlock.src/M000271.html +19 -0
  361. data/doc/classes/Nudge/DeadLocation.html +152 -0
  362. data/doc/classes/Nudge/DeadLocation.src/M000334.html +17 -0
  363. data/doc/classes/Nudge/Erc.html +335 -0
  364. data/doc/classes/Nudge/Erc.src/M000278.html +16 -0
  365. data/doc/classes/Nudge/Erc.src/M000279.html +15 -0
  366. data/doc/classes/Nudge/Erc.src/M000280.html +15 -0
  367. data/doc/classes/Nudge/Erc.src/M000281.html +15 -0
  368. data/doc/classes/Nudge/Erc.src/M000282.html +18 -0
  369. data/doc/classes/Nudge/Erc.src/M000283.html +15 -0
  370. data/doc/classes/Nudge/Erc.src/M000284.html +17 -0
  371. data/doc/classes/Nudge/Erc.src/M000285.html +15 -0
  372. data/doc/classes/Nudge/Individual.html +313 -0
  373. data/doc/classes/Nudge/Individual.src/M000314.html +21 -0
  374. data/doc/classes/Nudge/Individual.src/M000315.html +15 -0
  375. data/doc/classes/Nudge/Individual.src/M000316.html +15 -0
  376. data/doc/classes/Nudge/Individual.src/M000317.html +17 -0
  377. data/doc/classes/Nudge/Individual.src/M000318.html +25 -0
  378. data/doc/classes/Nudge/InstructionPoint/InstructionNotFoundError.html +110 -0
  379. data/doc/classes/Nudge/InstructionPoint.html +350 -0
  380. data/doc/classes/Nudge/InstructionPoint.src/M000299.html +15 -0
  381. data/doc/classes/Nudge/InstructionPoint.src/M000300.html +15 -0
  382. data/doc/classes/Nudge/InstructionPoint.src/M000301.html +17 -0
  383. data/doc/classes/Nudge/InstructionPoint.src/M000302.html +15 -0
  384. data/doc/classes/Nudge/InstructionPoint.src/M000303.html +17 -0
  385. data/doc/classes/Nudge/InstructionPoint.src/M000304.html +17 -0
  386. data/doc/classes/Nudge/InstructionPoint.src/M000305.html +17 -0
  387. data/doc/classes/Nudge/InstructionPoint.src/M000306.html +15 -0
  388. data/doc/classes/Nudge/Interpreter.html +369 -0
  389. data/doc/classes/Nudge/Interpreter.src/M000257.html +20 -0
  390. data/doc/classes/Nudge/Interpreter.src/M000258.html +19 -0
  391. data/doc/classes/Nudge/Interpreter.src/M000259.html +15 -0
  392. data/doc/classes/Nudge/Interpreter.src/M000260.html +19 -0
  393. data/doc/classes/Nudge/Interpreter.src/M000261.html +17 -0
  394. data/doc/classes/Nudge/LiteralPoint.html +291 -0
  395. data/doc/classes/Nudge/LiteralPoint.src/M000272.html +16 -0
  396. data/doc/classes/Nudge/LiteralPoint.src/M000273.html +15 -0
  397. data/doc/classes/Nudge/LiteralPoint.src/M000274.html +15 -0
  398. data/doc/classes/Nudge/LiteralPoint.src/M000275.html +18 -0
  399. data/doc/classes/Nudge/LiteralPoint.src/M000276.html +17 -0
  400. data/doc/classes/Nudge/LiteralPoint.src/M000277.html +15 -0
  401. data/doc/classes/Nudge/Location.html +525 -0
  402. data/doc/classes/Nudge/Location.src/M000319.html +19 -0
  403. data/doc/classes/Nudge/Location.src/M000320.html +15 -0
  404. data/doc/classes/Nudge/Location.src/M000321.html +26 -0
  405. data/doc/classes/Nudge/Location.src/M000322.html +15 -0
  406. data/doc/classes/Nudge/Location.src/M000323.html +20 -0
  407. data/doc/classes/Nudge/Location.src/M000324.html +16 -0
  408. data/doc/classes/Nudge/Location.src/M000325.html +25 -0
  409. data/doc/classes/Nudge/Location.src/M000326.html +15 -0
  410. data/doc/classes/Nudge/Location.src/M000327.html +21 -0
  411. data/doc/classes/Nudge/Location.src/M000328.html +16 -0
  412. data/doc/classes/Nudge/Location.src/M000329.html +15 -0
  413. data/doc/classes/Nudge/Location.src/M000330.html +16 -0
  414. data/doc/classes/Nudge/Location.src/M000331.html +20 -0
  415. data/doc/classes/Nudge/Location.src/M000332.html +17 -0
  416. data/doc/classes/Nudge/Location.src/M000333.html +17 -0
  417. data/doc/classes/Nudge/NondominatedSubset.html +196 -0
  418. data/doc/classes/Nudge/NondominatedSubset.src/M000005.html +19 -0
  419. data/doc/classes/Nudge/NondominatedSubset.src/M000006.html +19 -0
  420. data/doc/classes/Nudge/NondominatedSubset.src/M000007.html +25 -0
  421. data/doc/classes/Nudge/NondominatedSubset.src/M000339.html +19 -0
  422. data/doc/classes/Nudge/NondominatedSubset.src/M000340.html +19 -0
  423. data/doc/classes/Nudge/NondominatedSubset.src/M000341.html +25 -0
  424. data/doc/classes/Nudge/PopulationResample.html +175 -0
  425. data/doc/classes/Nudge/PopulationResample.src/M000003.html +22 -0
  426. data/doc/classes/Nudge/PopulationResample.src/M000337.html +22 -0
  427. data/doc/classes/Nudge/ProgramPoint.html +148 -0
  428. data/doc/classes/Nudge/ProgramPoint.src/M000262.html +15 -0
  429. data/doc/classes/Nudge/RandomGuess.html +176 -0
  430. data/doc/classes/Nudge/RandomGuess.src/M000002.html +21 -0
  431. data/doc/classes/Nudge/RandomGuess.src/M000336.html +21 -0
  432. data/doc/classes/Nudge/ResampleValues.html +169 -0
  433. data/doc/classes/Nudge/ResampleValues.src/M000004.html +36 -0
  434. data/doc/classes/Nudge/ResampleValues.src/M000338.html +36 -0
  435. data/doc/classes/Nudge/SearchOperator.html +175 -0
  436. data/doc/classes/Nudge/SearchOperator.src/M000001.html +15 -0
  437. data/doc/classes/Nudge/SearchOperator.src/M000335.html +15 -0
  438. data/doc/classes/Nudge/Stack.html +350 -0
  439. data/doc/classes/Nudge/Stack.src/M000307.html +15 -0
  440. data/doc/classes/Nudge/Stack.src/M000308.html +15 -0
  441. data/doc/classes/Nudge/Stack.src/M000309.html +18 -0
  442. data/doc/classes/Nudge/Stack.src/M000310.html +15 -0
  443. data/doc/classes/Nudge/Stack.src/M000311.html +15 -0
  444. data/doc/classes/Nudge/Stack.src/M000312.html +15 -0
  445. data/doc/classes/Nudge/Stack.src/M000313.html +15 -0
  446. data/doc/classes/Nudge/UniformBackboneCrossover.html +152 -0
  447. data/doc/classes/Nudge/UniformBackboneCrossover.src/M000008.html +35 -0
  448. data/doc/classes/Nudge/UniformBackboneCrossover.src/M000342.html +35 -0
  449. data/doc/classes/Nudge.html +174 -0
  450. data/doc/classes/NudgeType.html +363 -0
  451. data/doc/classes/NudgeType.src/M000225.html +17 -0
  452. data/doc/classes/NudgeType.src/M000226.html +15 -0
  453. data/doc/classes/NudgeType.src/M000227.html +15 -0
  454. data/doc/classes/NudgeType.src/M000228.html +15 -0
  455. data/doc/classes/NudgeType.src/M000229.html +15 -0
  456. data/doc/classes/NudgeType.src/M000230.html +15 -0
  457. data/doc/classes/NudgeType.src/M000231.html +15 -0
  458. data/doc/classes/NudgeType.src/M000232.html +15 -0
  459. data/doc/classes/NudgeType.src/M000233.html +15 -0
  460. data/doc/classes/NudgeType.src/M000234.html +15 -0
  461. data/doc/created.rid +1 -0
  462. data/doc/files/lib/instructions/bool_basics_rb.html +90 -0
  463. data/doc/files/lib/instructions/comparisons_rb.html +90 -0
  464. data/doc/files/lib/instructions/conditionals_rb.html +90 -0
  465. data/doc/files/lib/instructions/conversions_rb.html +90 -0
  466. data/doc/files/lib/instructions/exec_rb.html +90 -0
  467. data/doc/files/lib/instructions/float_arithmetic_rb.html +90 -0
  468. data/doc/files/lib/instructions/float_transcendental_rb.html +90 -0
  469. data/doc/files/lib/instructions/infrastructure_rb.html +100 -0
  470. data/doc/files/lib/instructions/int_arithmetic_rb.html +90 -0
  471. data/doc/files/lib/instructions/random_value_rb.html +90 -0
  472. data/doc/files/lib/instructions/stack_manipulation_rb.html +90 -0
  473. data/doc/files/lib/interpreter/grammars/nudge_language_helpers_rb.html +97 -0
  474. data/doc/files/lib/interpreter/grammars/nudge_language_treetop.html +180 -0
  475. data/doc/files/lib/interpreter/interpreter_rb.html +90 -0
  476. data/doc/files/lib/interpreter/programPoints_rb.html +90 -0
  477. data/doc/files/lib/interpreter/stack_rb.html +90 -0
  478. data/doc/files/lib/interpreter/types/codeType_rb.html +157 -0
  479. data/doc/files/lib/interpreter/types/codeType_rb.src/M000001.html +15 -0
  480. data/doc/files/lib/interpreter/types/codeType_rb.src/M000002.html +15 -0
  481. data/doc/files/lib/interpreter/types/pushTypes_rb.html +107 -0
  482. data/doc/files/lib/nudge_rb.html +152 -0
  483. data/doc/files/lib/search/evaluators/structural_complexity_rb.html +90 -0
  484. data/doc/files/lib/search/helpers_rb.html +90 -0
  485. data/doc/files/lib/search/individual/individual_rb.html +90 -0
  486. data/doc/files/lib/search/locations/location_rb.html +100 -0
  487. data/doc/files/lib/search/operators/basic_operators_rb.html +90 -0
  488. data/doc/fr_class_index.html +191 -0
  489. data/doc/fr_file_index.html +71 -0
  490. data/doc/fr_method_index.html +711 -0
  491. data/doc/index.html +21 -0
  492. data/doc/rdoc-style.css +299 -0
  493. data/features/parser_recognizes_nudge_language.feature +9 -0
  494. data/lib/instructions/bool_basics.rb +85 -0
  495. data/lib/instructions/code_basics.rb +14 -0
  496. data/lib/instructions/comparisons.rb +152 -0
  497. data/lib/instructions/conditionals.rb +44 -0
  498. data/lib/instructions/conversions.rb +94 -0
  499. data/lib/instructions/exec.rb +154 -0
  500. data/lib/instructions/float_arithmetic.rb +201 -0
  501. data/lib/instructions/float_transcendental.rb +47 -0
  502. data/lib/instructions/infrastructure.rb +84 -0
  503. data/lib/instructions/int_arithmetic.rb +160 -0
  504. data/lib/instructions/name_basics.rb +44 -0
  505. data/lib/instructions/name_bindings.rb +65 -0
  506. data/lib/instructions/random_value.rb +43 -0
  507. data/lib/instructions/stack_manipulation.rb +739 -0
  508. data/lib/interpreter/grammars/nudge_language.treetop +83 -0
  509. data/lib/interpreter/grammars/nudge_language_helpers.rb +64 -0
  510. data/lib/interpreter/interpreter.rb +176 -0
  511. data/lib/interpreter/programPoints.rb +236 -0
  512. data/lib/interpreter/stack.rb +39 -0
  513. data/lib/interpreter/types/codeType.rb +108 -0
  514. data/lib/interpreter/types/pushTypes.rb +102 -0
  515. data/lib/nudge.rb +38 -0
  516. data/lib/search/experiments/experiment.rb +53 -0
  517. data/lib/search/helpers.rb +22 -0
  518. data/lib/search/individual/batch.rb +25 -0
  519. data/lib/search/individual/individual.rb +147 -0
  520. data/lib/search/operators/basic_operators.rb +230 -0
  521. data/lib/search/operators/evaluators.rb +107 -0
  522. data/lib/search/operators/samplers_and_selectors.rb +123 -0
  523. data/lib/search/stations/station.rb +147 -0
  524. data/push_language_coverage.md +177 -0
  525. data/readme.md +19 -0
  526. data/spec/data/couchdb_spec.rb +2 -0
  527. data/spec/fixtures/just_block.example +1 -0
  528. data/spec/fixtures/just_block_with_newline.example +1 -0
  529. data/spec/fixtures/long_arithmetic.example +7 -0
  530. data/spec/fixtures/one_line_instr.example +1 -0
  531. data/spec/fixtures/untidy1.example +20 -0
  532. data/spec/fixtures/untidy1fixed.example +12 -0
  533. data/spec/instructions/bool_basics_spec.rb +97 -0
  534. data/spec/instructions/bool_stack_spec.rb +391 -0
  535. data/spec/instructions/code_basics_spec.rb +43 -0
  536. data/spec/instructions/code_stack_spec.rb +382 -0
  537. data/spec/instructions/comparisons_spec.rb +486 -0
  538. data/spec/instructions/conditionals_spec.rb +162 -0
  539. data/spec/instructions/conversions_spec.rb +92 -0
  540. data/spec/instructions/exec_spec.rb +883 -0
  541. data/spec/instructions/float_calculations_spec.rb +148 -0
  542. data/spec/instructions/float_stack_spec.rb +382 -0
  543. data/spec/instructions/float_transcendental_spec.rb +89 -0
  544. data/spec/instructions/instruction_class_spec.rb +9 -0
  545. data/spec/instructions/int_calculations_spec.rb +125 -0
  546. data/spec/instructions/int_stack_spec.rb +398 -0
  547. data/spec/instructions/name_basics_spec.rb +158 -0
  548. data/spec/instructions/name_bindings_spec.rb +257 -0
  549. data/spec/instructions/name_stack_spec.rb +382 -0
  550. data/spec/instructions/random_values_spec.rb +68 -0
  551. data/spec/integration/search_integration.rb +67 -0
  552. data/spec/interpreter/channel_spec.rb +92 -0
  553. data/spec/interpreter/codeblock_spec.rb +135 -0
  554. data/spec/interpreter/codetype_spec.rb +257 -0
  555. data/spec/interpreter/erc_spec.rb +130 -0
  556. data/spec/interpreter/instruction_spec.rb +97 -0
  557. data/spec/interpreter/interpreter_spec.rb +266 -0
  558. data/spec/interpreter/literal_spec.rb +94 -0
  559. data/spec/interpreter/parser_spec.rb +324 -0
  560. data/spec/interpreter/stack_spec.rb +81 -0
  561. data/spec/interpreter/types_spec.rb +102 -0
  562. data/spec/search/batch_spec.rb +30 -0
  563. data/spec/search/experiments/experiment_spec.rb +101 -0
  564. data/spec/search/helpers_spec.rb +59 -0
  565. data/spec/search/individual_spec.rb +356 -0
  566. data/spec/search/operators/any_one_sampler_spec.rb +40 -0
  567. data/spec/search/operators/dominated_quantile_spec.rb +111 -0
  568. data/spec/search/operators/duplicate_genomes_spec.rb +35 -0
  569. data/spec/search/operators/evaluators/program_point_evaluator_spec.rb +43 -0
  570. data/spec/search/operators/evaluators/test_case_evaluator_spec.rb +133 -0
  571. data/spec/search/operators/infrastructure_spec.rb +47 -0
  572. data/spec/search/operators/most_dominated_subset_spec.rb +47 -0
  573. data/spec/search/operators/nondominated_subset_spec.rb +97 -0
  574. data/spec/search/operators/pointCrossover_spec.rb +55 -0
  575. data/spec/search/operators/pointDeletion_spec.rb +57 -0
  576. data/spec/search/operators/pointMutation_spec.rb +71 -0
  577. data/spec/search/operators/random_guess_spec.rb +51 -0
  578. data/spec/search/operators/resample_and_clone_spec.rb +50 -0
  579. data/spec/search/operators/resample_values_spec.rb +126 -0
  580. data/spec/search/operators/sizePreservingMutation_spec.rb +2 -0
  581. data/spec/search/operators/uniformBackboneCrossover_spec.rb +63 -0
  582. data/spec/search/stations/station_spec.rb +496 -0
  583. data/spec/spec_helper.rb +11 -0
  584. metadata +738 -0
@@ -0,0 +1,356 @@
1
+ require File.join(File.dirname(__FILE__), "./../spec_helper")
2
+ require "fakeweb"
3
+ include Nudge
4
+
5
+ describe "Individual" do
6
+ describe "class methods" do
7
+ it "should have a class attribute Parser for validating code" do
8
+ Individual.helperParser.should be_a_kind_of(NudgeLanguageParser)
9
+ end
10
+ end
11
+
12
+ describe "initialization" do
13
+ before(:each) do
14
+ @i1 = Individual.new("literal bool (false)")
15
+ end
16
+
17
+ it "should have a genome string, with no default value" do
18
+ @i1.genome.should be_a_kind_of(String)
19
+ lambda{Individual.new()}.should raise_error
20
+ end
21
+
22
+ it "should have a program attribute, which is the parsed genome" do
23
+ @par = NudgeLanguageParser.new
24
+ expected = @par.parse(@i1.genome).to_points
25
+ @i1.program.tidy.should == expected.tidy
26
+ end
27
+
28
+ it "should raise an ArgumentError if the genome doesn't parse" do
29
+ lambda{Individual.new("bad stuff happens")}.should raise_error(ArgumentError)
30
+ lambda{Individual.new("block {")}.should raise_error(ArgumentError)
31
+ lambda{Individual.new("}")}.should raise_error(ArgumentError)
32
+
33
+ lambda{Individual.new("")}.should raise_error(ArgumentError)
34
+ lambda{Individual.new("block {}")}.should_not raise_error(ArgumentError)
35
+ end
36
+
37
+ it "should have a scores hash, which is empty" do
38
+ @i1.scores.should == {}
39
+ end
40
+ it "should have a timestamp, which is when (wall clock time) it was made" do
41
+ @i1.timestamp.should be_a_kind_of(Fixnum)
42
+ end
43
+ it "should have an age, defaulting to zero" do
44
+ @i1.progress.should == 0
45
+ end
46
+ it "should have a locationID, defaulting to an empty string" do
47
+ @i1.station.should == ""
48
+ end
49
+ it "should have a list of ancestors, defaulting to none" do
50
+ @i1.ancestors.should == []
51
+ end
52
+ end
53
+
54
+
55
+
56
+ describe "runnable?" do
57
+ it "should have a genome that an interpreter can understand" do
58
+ @i1 = Individual.new(fixture(:long_arithmetic))
59
+ @interp = Interpreter.new
60
+ @interp.reset(@i1.genome)
61
+ @interp.enable_all_instructions
62
+ @interp.run
63
+ @interp.stacks[:int].peek.value.should == -36
64
+ end
65
+ end
66
+
67
+
68
+
69
+ describe "#known_scores and #score_vector" do
70
+ before(:each) do
71
+ @oneGuy = Individual.new("block {}")
72
+ @oneGuy.scores = {"beta" => -100, "alpha" => 100, "zeta" => 22}
73
+ end
74
+
75
+ it "known_scores should return a sorted list of the keys of the scores hash" do
76
+ @oneGuy.known_scores.should == ["alpha", "beta", "zeta"]
77
+ end
78
+
79
+ it "should return an Array of his #scores, in order based on a template w/default known_scores" do
80
+ @oneGuy.score_vector.should == [100,-100,22]
81
+ @oneGuy.score_vector(["alpha"]).should == [100]
82
+ end
83
+ end
84
+
85
+
86
+
87
+ describe "#dominated_by?" do
88
+ before(:each) do
89
+ @oneGuy = Individual.new("block {}")
90
+ @betterGuy = Individual.new("block {}")
91
+ @mixedGuy = Individual.new("block {}")
92
+ @extraGuy = Individual.new("block {}")
93
+
94
+ @oneGuy.scores = {"beta" => -100, "alpha" => 100, "gamma" => 22 }
95
+ @betterGuy.scores = {"beta" => -120, "alpha" => 20, "gamma" => 0 }
96
+ @mixedGuy.scores = {"beta" => -10, "alpha" => 20, "gamma" => 100}
97
+ @extraGuy.scores = {"beta" => -120, "alpha" => 20, "gamma" => 21, "delta" => 10 }
98
+ end
99
+
100
+ it "should test whether self dominates the other individual" do
101
+ @oneGuy.dominated_by?(@betterGuy).should == true
102
+ @betterGuy.dominated_by?(@oneGuy).should == false
103
+ @oneGuy.dominated_by?(@mixedGuy).should == false
104
+ @mixedGuy.dominated_by?(@oneGuy).should == false
105
+ end
106
+
107
+ it "should use a template of score keys to establish criteria for comparison, defaulting to self's" do
108
+ @oneGuy.dominated_by?(@mixedGuy).should == false
109
+ @oneGuy.dominated_by?(@mixedGuy, ["alpha"]).should == true
110
+ @mixedGuy.dominated_by?(@oneGuy, ["beta", "gamma"]).should == true
111
+ end
112
+
113
+ it "should give the benefit of the doubt when comparing against a missing score" do
114
+ @oneGuy.dominated_by?(@extraGuy).should == true # because @extraGuy has all the same scores as self
115
+ @oneGuy.dominated_by?(@extraGuy,["delta"]).should == false # because self has no "delta" score
116
+ @extraGuy.dominated_by?(@oneGuy).should == false # because they're incomparible on "delta"
117
+ end
118
+ end
119
+
120
+
121
+
122
+ describe "isolate_point" do
123
+ before(:each) do
124
+ @snipper = Individual.new("block {do some1 \n do some2 \n block {\n do some3}}")
125
+ end
126
+
127
+ it "should raise an ArgumentError if the integer param referring to a particular point is OOB" do
128
+ lambda{@snipper.isolate_point()}.should raise_error(ArgumentError)
129
+ lambda{@snipper.isolate_point(-12)}.should raise_error(ArgumentError)
130
+ lambda{@snipper.isolate_point(912)}.should raise_error(ArgumentError)
131
+
132
+ lambda{@snipper.isolate_point(2)}.should_not raise_error(ArgumentError)
133
+ end
134
+
135
+ it "should return a Hash containing up to three items" do
136
+ works = @snipper.isolate_point(2)
137
+ works.should be_a_kind_of(Hash)
138
+ works.length.should == 3
139
+ works.each_value {|chunk| chunk.should be_a_kind_of(String)}
140
+
141
+ @snipper.isolate_point(1).length.should == 1
142
+ @snipper.isolate_point(5).length.should == 3
143
+ end
144
+
145
+ it "should include the material in the genome before the point in the first string" do
146
+ works = @snipper.isolate_point(2)
147
+ works[:left].should include("block {")
148
+ works[:left].should_not include("}")
149
+
150
+ whole = @snipper.isolate_point(1)
151
+ whole[:left].should == nil
152
+ end
153
+
154
+ it "should include the material in the genome after the point in the third string" do
155
+ works = @snipper.isolate_point(2)
156
+ works[:right].should include("do some2")
157
+ works[:right].should_not include("do some1")
158
+
159
+ whole = @snipper.isolate_point(1)
160
+ whole[:right].should == nil
161
+
162
+ bracesLeft = @snipper.isolate_point(5)
163
+ bracesLeft[:right].should == "}}"
164
+ end
165
+
166
+ it "should include the isolated point in the middle string" do
167
+ works = @snipper.isolate_point(2)
168
+ works[:middle].strip.should == "do some1"
169
+
170
+ @snipper.isolate_point(3)[:middle].strip.should == "do some2"
171
+ @snipper.isolate_point(4)[:middle].gsub(/([\s]+)/," ").should == "block { do some3}"
172
+ @snipper.isolate_point(5)[:middle].strip.should == "do some3"
173
+ end
174
+ end
175
+
176
+
177
+
178
+ describe "delete_point" do
179
+ before(:each) do
180
+ @clipper = Individual.new("block {do some1 \n do some2 \n block {\n do some3}}")
181
+ @parser = NudgeLanguageParser.new()
182
+ end
183
+
184
+ it "should return Individual#genome if[f] the position param is out of bounds" do
185
+ @clipper.delete_point(-12).should == @clipper.program.listing
186
+ @clipper.delete_point(933).should == @clipper.program.listing
187
+ @clipper.delete_point(2).should_not == @clipper.program.listing
188
+ end
189
+
190
+ it "should call self#isolate_point to slice the wildtype genome" do
191
+ @clipper.should_receive(:isolate_point).with(2).and_return(
192
+ {:left => "so",:middle=>"it",:right=>"works"})
193
+ @clipper.delete_point(2)
194
+ end
195
+
196
+ it "should produce a parsable genome" do
197
+ (0..5).each do |where|
198
+ @parser.parse(@clipper.delete_point(2)).should_not == nil
199
+ end
200
+ end
201
+
202
+ it "should return a genome with at least one fewer program points" do
203
+ startPoints = @clipper.points
204
+ (0..5).each do |where|
205
+ @parser.parse(@clipper.delete_point(2)).to_points.points.should < startPoints
206
+ end
207
+ end
208
+
209
+ it "should delete the expected specific point (and any subpoints it has)" do
210
+ @parser.parse(@clipper.delete_point(2)).to_points.points.should == 4
211
+ @parser.parse(@clipper.delete_point(3)).to_points.points.should == 4
212
+ @parser.parse(@clipper.delete_point(4)).to_points.points.should == 3
213
+ @parser.parse(@clipper.delete_point(5)).to_points.points.should == 4
214
+ end
215
+
216
+ it "should return 'block {}' when the entire program is deleted" do
217
+ @clipper.delete_point(1).should == "block {}"
218
+ end
219
+ end
220
+
221
+
222
+ describe "replace_point" do
223
+ before(:each) do
224
+ @receiver = Individual.new("block {do some1 \n do some2 \n block {\n do some3}}")
225
+ @parser = NudgeLanguageParser.new()
226
+ @mutant = "do NOTHING"
227
+ end
228
+
229
+ it "should return Individual#genome if[f] the position param is out of bounds" do
230
+ @receiver.replace_point(-1,@mutant).should == @receiver.program.listing
231
+ @receiver.replace_point(132,@mutant).should == @receiver.program.listing
232
+ @receiver.replace_point(2,@mutant).should_not == @receiver.program.listing
233
+ end
234
+
235
+ it "should raise an ArgumentError if passed an empty replacement" do
236
+ lambda{@receiver.replace_point(1,"")}.should raise_error(ArgumentError)
237
+ end
238
+
239
+
240
+ it "should call self#isolate_point to slice the wildtype genome" do
241
+ @receiver.should_receive(:isolate_point).with(2).and_return(
242
+ {:left => "so ",:middle=>"it",:right=>" works"})
243
+ @receiver.replace_point(2,"this")
244
+ end
245
+
246
+ it "should produce a parsable genome" do
247
+ @parser.parse(@receiver.replace_point(2,@mutant)).should_not == nil
248
+ @parser.parse(@receiver.replace_point(1,@mutant)).should_not == nil
249
+ end
250
+
251
+ it "should replace the expected specific point (and any subpoints it has)" do
252
+ @receiver.replace_point(2,@mutant).should_not include("some1")
253
+ @receiver.replace_point(3,@mutant).should_not include("some2")
254
+ @receiver.replace_point(4,@mutant).should_not include("some3")
255
+ @receiver.replace_point(5,@mutant).should_not include("some3")
256
+ @receiver.replace_point(1,@mutant).should_not include("block")
257
+ end
258
+
259
+ it "should replace the entire program if it replaces point 0" do
260
+ @receiver.replace_point(1,@mutant).should == " do NOTHING "
261
+ end
262
+
263
+ end
264
+
265
+ describe "Station knowledge" do
266
+ before(:each) do
267
+ @dude = Individual.new("block {}")
268
+ Station.cleanup
269
+ @where = Station.new("here")
270
+ end
271
+
272
+ it "should know its Station" do
273
+ @where.add_individual @dude
274
+ @dude.station == @where
275
+ end
276
+ end
277
+
278
+ describe "#write behavior" do
279
+ before(:each) do
280
+ Station.cleanup
281
+ @dude = Individual.new("block {}")
282
+ @dude.scores["error"] = 1
283
+ @dude.timestamp = Time.utc(2000,"jan",1,20,15,1)
284
+ @where = Station.new("here")
285
+ @where.stub!(:database => "http://127.0.0.1:5984/here")
286
+ @where.add_individual(@dude)
287
+ FakeWeb.allow_net_connect = false
288
+
289
+ @response_body = <<-END
290
+ {
291
+ "id": "12345678",
292
+ "rev": "1-12345678"
293
+ }
294
+ END
295
+ end
296
+
297
+ it "should write its data to the database for its Station" do
298
+ FakeWeb.register_uri(:post, "http://127.0.0.1:5984/here", body:@response_body)
299
+ @dude.write
300
+ @dude.id.should == "12345678"
301
+ end
302
+
303
+ it "should write the genome" do
304
+ mockDatabase = mock("fakeDB")
305
+ CouchRest.should_receive(:database!).and_return(mockDatabase)
306
+ mockDatabase.should_receive(:save_doc).
307
+ with(hash_including({"genome" => "block {}"})).and_return(@response_body)
308
+ @dude.write
309
+ end
310
+
311
+ it "should write the scores hash" do
312
+ mockDatabase = mock("fakeDB")
313
+ CouchRest.should_receive(:database!).and_return(mockDatabase)
314
+ mockDatabase.should_receive(:save_doc).
315
+ with(hash_including({"scores" => {"error" => 1}})).and_return(@response_body)
316
+ @dude.write
317
+ end
318
+
319
+ it "should write the Time.now" do
320
+ mockDatabase = mock("fakeDB")
321
+ CouchRest.should_receive(:database!).and_return(mockDatabase)
322
+ mockDatabase.should_receive(:save_doc).
323
+ with(hash_including({"creation_time" => Time.utc(2000,"jan",1,20,15,1)})).and_return(@response_body)
324
+ @dude.write
325
+ end
326
+ end
327
+
328
+
329
+ describe "#get" do
330
+ before(:each) do
331
+ @url = "http://localhost:5984/here"
332
+ @individual_id = "88888"
333
+ @genome = "do int_add"
334
+
335
+ @response_body = <<-END
336
+ {
337
+ "_id": "88888",
338
+ "_rev": "1-12345678",
339
+ "genome": "#{@genome}"
340
+ }
341
+ END
342
+
343
+ FakeWeb.allow_net_connect = false
344
+ FakeWeb.register_uri(:get, "#{@url}/#{@individual_id}", body:@response_body)
345
+ end
346
+
347
+ it "retrive an individual from the data store by id" do
348
+ @dude = Individual.get(@url, @individual_id)
349
+ @dude.id.should == @individual_id
350
+ @dude.genome.should == @genome
351
+ end
352
+
353
+ it "should handle connection errors"
354
+ end
355
+
356
+ end
@@ -0,0 +1,40 @@
1
+ require File.join(File.dirname(__FILE__), "./../../spec_helper")
2
+ include Nudge
3
+
4
+ describe AnyOneSampler do
5
+ before(:each) do
6
+ @ao = AnyOneSampler.new
7
+ end
8
+
9
+
10
+ describe "#generate" do
11
+ before(:each) do
12
+ @dudes = Batch[Individual.new("block {}"), Individual.new("block {}"), Individual.new("block {}")]
13
+ @dudes[0].scores = Hash["first", 2, "second", 20, "third", 200]
14
+ @dudes[1].scores = Hash["first", 20, "second", 200, "third", 2]
15
+ @dudes[2].scores = Hash["first", 200, "second", 2, "third", 20]
16
+ end
17
+
18
+ it "should take a Batch as a first parameter" do
19
+ lambda{@ao.generate()}.should raise_error(ArgumentError)
20
+ lambda{@ao.generate(@dudes)}.should_not raise_error(ArgumentError)
21
+ end
22
+
23
+ it "should return a Batch" do
24
+ @ao.generate(@dudes).should be_a_kind_of(Batch)
25
+ end
26
+
27
+ it "should return a Batch containing references to individuals in the original Batch" do
28
+ one = @ao.generate(@dudes)
29
+ one.length.should == 1
30
+ one.each {|dude| @dudes.should include(dude)}
31
+ end
32
+
33
+ it "should invoke Batch#sample" do
34
+ @dudes.should_receive(:sample).and_return(@dudes[0])
35
+ one = @ao.generate(@dudes)
36
+ end
37
+
38
+ end
39
+
40
+ end
@@ -0,0 +1,111 @@
1
+ require File.join(File.dirname(__FILE__), "./../../spec_helper")
2
+ include Nudge
3
+
4
+ describe DominatedQuantileSampler do
5
+ before(:each) do
6
+ @dq = DominatedQuantileSampler.new
7
+ end
8
+
9
+
10
+ describe "domination_classes" do
11
+ before(:each) do
12
+ @dudes = Batch[Individual.new("block {}"), Individual.new("do int_add")]
13
+ @dudes[0].scores["first"] = 120
14
+ @dudes[1].scores["first"] = 2
15
+ @dudes[0].scores["second"] = 2
16
+ @dudes[1].scores["second"] = 120
17
+ @dudes[0].scores["third"] = 20
18
+ @dudes[1].scores["third"] = 1200
19
+ end
20
+
21
+ it "should take a Batch as an argument" do
22
+ lambda{@dq.domination_classes()}.should raise_error(ArgumentError)
23
+ lambda{@dq.domination_classes(@dudes)}.should_not raise_error(ArgumentError)
24
+
25
+ end
26
+
27
+ it "can take a template of objective names to use" do
28
+ lambda{@dq.domination_classes(@dudes, ["first"])}.should_not raise_error(ArgumentError)
29
+ end
30
+
31
+ it "should return a Hash" do
32
+ @dq.domination_classes(@dudes, ["first"]).should be_a_kind_of(Hash)
33
+ end
34
+
35
+ it "should use the count of dominating Individuals as the key" do
36
+ @dq.domination_classes(@dudes, ["second"]).keys.should == [0,1]
37
+ @dq.domination_classes(@dudes).keys.should == [0]
38
+
39
+ end
40
+
41
+ it "should have an Array of the Individuals in that class as the value" do
42
+ @dq.domination_classes(@dudes, ["first"])[0].length.should == 1
43
+ @dq.domination_classes(@dudes, ["first"])[0][0].should == @dudes[1]
44
+ @dq.domination_classes(@dudes, ["second"])[0].length.should == 1
45
+ @dq.domination_classes(@dudes, ["second"])[0][0].should == @dudes[0]
46
+ @dq.domination_classes(@dudes, ["second", "third"])[0].length.should == 1
47
+ @dq.domination_classes(@dudes, ["second", "third"])[0][0].should == @dudes[0]
48
+ end
49
+ end
50
+
51
+
52
+ describe "#generate" do
53
+ before(:each) do
54
+ @dudes = Batch[Individual.new("block {}"), Individual.new("do int_add")]
55
+ @dudes[0].scores["first"] = 120
56
+ @dudes[1].scores["first"] = 2
57
+ @dudes[0].scores["second"] = 2
58
+ @dudes[1].scores["second"] = 120
59
+ @dudes[0].scores["third"] = 20
60
+ @dudes[1].scores["third"] = 1200
61
+ end
62
+
63
+ it "should take a Batch as a first parameter" do
64
+ lambda{@dq.generate()}.should raise_error(ArgumentError)
65
+ lambda{@dq.generate(@dudes)}.should_not raise_error(ArgumentError)
66
+ end
67
+
68
+ it "should return a Batch" do
69
+ @dq.generate(@dudes).should be_a_kind_of(Batch)
70
+ end
71
+
72
+ it "should return a Batch containing references to individuals in the original Batch" do
73
+ half = @dq.generate(@dudes)
74
+ half.length.should be > 0
75
+ half.each {|dude| @dudes.should include(dude)}
76
+ end
77
+
78
+ it "should have a parameter that specifies what fraction to return" do
79
+ some = @dq.generate(@dudes,1.0)
80
+ some.length.should == 2
81
+
82
+ some = @dq.generate(@dudes,0.5)
83
+ some.length.should == 1
84
+ end
85
+
86
+ it "should always return at least one for a non-zero fraction" do
87
+ some = @dq.generate(@dudes,0.01)
88
+ some.length.should be > 0
89
+ some.each {|dude| @dudes.should include(dude)}
90
+
91
+ some = @dq.generate(@dudes,0)
92
+ some.length.should == 0
93
+ end
94
+
95
+
96
+ it "should take a template of objectives to use in sorting" do
97
+ @dq.generate(@dudes,0.5,["first"]).should include(@dudes[0])
98
+ @dq.generate(@dudes,0.5,["second"]).should include(@dudes[1])
99
+ @dq.generate(@dudes,0.5,["second", "third"]).should include(@dudes[1])
100
+ end
101
+
102
+ it "should return the most-dominated Individuals first, nondominated last" do
103
+ some = @dq.generate(@dudes,1, ["first"])
104
+ some[0].should == @dudes[0]
105
+
106
+ some = @dq.generate(@dudes,1, ["second"])
107
+ some[0].should == @dudes[1]
108
+ end
109
+ end
110
+
111
+ end
@@ -0,0 +1,35 @@
1
+ require File.join(File.dirname(__FILE__), "./../../spec_helper")
2
+ include Nudge
3
+
4
+ describe AllDuplicatedGenomesSampler do
5
+ before(:each) do
6
+ @dg = AllDuplicatedGenomesSampler.new
7
+ end
8
+
9
+
10
+ describe "#generate" do
11
+ before(:each) do
12
+ @dudes = Batch[Individual.new("block {}"), Individual.new("block {}"), Individual.new("do int_add")]
13
+ end
14
+
15
+ it "should take a Batch as a first parameter" do
16
+ lambda{@dg.generate()}.should raise_error(ArgumentError)
17
+ lambda{@dg.generate(@dudes)}.should_not raise_error(ArgumentError)
18
+ end
19
+
20
+ it "should return a Batch" do
21
+ @dg.generate(@dudes).should be_a_kind_of(Batch)
22
+ end
23
+
24
+ it "should return a Batch containing references to individuals in the original Batch" do
25
+ repeats = @dg.generate(@dudes)
26
+ repeats.length.should == 2
27
+ repeats.each {|dude| @dudes.should include(dude)}
28
+ end
29
+
30
+ it "should return an empty Batch if there are no duplicates" do
31
+ @dudes.delete_at(0)
32
+ @dg.generate(@dudes).should be_empty
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,43 @@
1
+ require File.join(File.dirname(__FILE__), "./../../../spec_helper")
2
+ include Nudge
3
+
4
+ describe ProgramPointEvaluator do
5
+
6
+ describe "initialization" do
7
+ it "should have an objective name set upon initialization" do
8
+ lambda{ProgramPointEvaluator.new}.should raise_error(ArgumentError)
9
+ end
10
+ end
11
+
12
+ describe "#evaluate" do
13
+ before(:each) do
14
+ @ppe = ProgramPointEvaluator.new(name:"point_count")
15
+ @dudes = Batch[
16
+ Individual.new("block {}"),
17
+ Individual.new("block { block {}}"),
18
+ Individual.new("block { block { block {}}}")
19
+ ]
20
+ end
21
+
22
+ it "should take a Batch of individuals as an argument" do
23
+ lambda{@ppe.evaluate(Individual.new("block {}"))}.should raise_error(ArgumentError)
24
+ lambda{@ppe.evaluate(Batch[Individual.new("block {}")])}.should_not raise_error(ArgumentError)
25
+ end
26
+
27
+ it "should raise an exception if it can't evaluate an Individual" do
28
+ lambda{@ppe.evaluate(Batch[Individual.new("blah_de_blah")])}.should raise_error(ArgumentError)
29
+ end
30
+
31
+ it "should write the number of program points into each individual" do
32
+ @dudes.each {|dude| dude.scores["point_count"].should == nil}
33
+ @ppe.evaluate(@dudes)
34
+ @dudes.collect {|dude| dude.scores["point_count"]}.should == [1,2,3]
35
+ end
36
+
37
+ it "should return the same Batch it got, with updated values" do
38
+ origIDs = @dudes.collect {|dude| dude.object_id}
39
+ @ppe.evaluate(@dudes)
40
+ @dudes.each {|dude| origIDs.should include(dude.object_id)}
41
+ end
42
+ end
43
+ end