nudge 0.2.6 → 0.2.7

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 (156) hide show
  1. data/VERSION +1 -1
  2. data/lib/instructions/bool/bool_and.rb +8 -0
  3. data/lib/instructions/bool/bool_define.rb +9 -0
  4. data/lib/instructions/bool/bool_depth.rb +5 -0
  5. data/lib/instructions/bool/bool_duplicate.rb +7 -0
  6. data/lib/instructions/bool/bool_equal_q.rb +8 -0
  7. data/lib/instructions/bool/bool_flush.rb +3 -0
  8. data/lib/instructions/bool/bool_not.rb +8 -0
  9. data/lib/instructions/bool/bool_or.rb +8 -0
  10. data/lib/instructions/bool/bool_pop.rb +3 -0
  11. data/lib/instructions/bool/bool_random.rb +3 -0
  12. data/lib/instructions/bool/bool_rotate.rb +11 -0
  13. data/lib/instructions/bool/bool_shove.rb +14 -0
  14. data/lib/instructions/bool/bool_swap.rb +3 -0
  15. data/lib/instructions/bool/bool_xor.rb +8 -0
  16. data/lib/instructions/bool/bool_yank.rb +12 -0
  17. data/lib/instructions/bool/bool_yankdup.rb +12 -0
  18. data/lib/instructions/code/code_atom_q.rb +9 -0
  19. data/lib/instructions/code/code_backbone_points.rb +17 -0
  20. data/lib/instructions/code/code_car.rb +15 -0
  21. data/lib/instructions/code/code_cdr.rb +13 -1
  22. data/lib/instructions/code/code_concatenate.rb +20 -0
  23. data/lib/instructions/code/code_cons.rb +22 -1
  24. data/lib/instructions/code/code_container.rb +21 -2
  25. data/lib/instructions/code/code_contains_q.rb +11 -0
  26. data/lib/instructions/code/code_define.rb +9 -0
  27. data/lib/instructions/code/code_depth.rb +5 -0
  28. data/lib/instructions/code/code_discrepancy.rb +13 -7
  29. data/lib/instructions/code/code_do_count.rb +21 -1
  30. data/lib/instructions/code/code_do_range.rb +44 -3
  31. data/lib/instructions/code/code_do_times.rb +39 -1
  32. data/lib/instructions/code/code_duplicate.rb +7 -0
  33. data/lib/instructions/code/code_equal_q.rb +9 -0
  34. data/lib/instructions/code/code_execute.rb +7 -0
  35. data/lib/instructions/code/code_execute_then_pop.rb +9 -0
  36. data/lib/instructions/code/code_flush.rb +3 -0
  37. data/lib/instructions/code/code_gsub.rb +11 -3
  38. data/lib/instructions/code/code_if.rb +8 -0
  39. data/lib/instructions/code/code_instructions.rb +12 -0
  40. data/lib/instructions/code/code_list.rb +10 -0
  41. data/lib/instructions/code/code_member_q.rb +14 -0
  42. data/lib/instructions/code/code_name_lookup.rb +10 -0
  43. data/lib/instructions/code/code_noop.rb +3 -0
  44. data/lib/instructions/code/code_nth.rb +12 -0
  45. data/lib/instructions/code/code_nth_cdr.rb +14 -2
  46. data/lib/instructions/code/code_nth_point.rb +15 -0
  47. data/lib/instructions/code/code_null_q.rb +11 -0
  48. data/lib/instructions/code/code_parses_q.rb +8 -0
  49. data/lib/instructions/code/code_points.rb +8 -0
  50. data/lib/instructions/code/code_pop.rb +3 -0
  51. data/lib/instructions/code/code_position.rb +11 -0
  52. data/lib/instructions/code/code_quote.rb +11 -0
  53. data/lib/instructions/code/code_replace_nth_point.rb +11 -0
  54. data/lib/instructions/code/code_rotate.rb +11 -0
  55. data/lib/instructions/code/code_shove.rb +14 -0
  56. data/lib/instructions/code/code_swap.rb +3 -0
  57. data/lib/instructions/code/code_yank.rb +12 -0
  58. data/lib/instructions/code/code_yankdup.rb +12 -0
  59. data/lib/instructions/conversion/bool_from_float.rb +9 -0
  60. data/lib/instructions/conversion/bool_from_int.rb +9 -0
  61. data/lib/instructions/conversion/code_from_bool.rb +9 -1
  62. data/lib/instructions/conversion/code_from_float.rb +10 -1
  63. data/lib/instructions/conversion/code_from_int.rb +10 -1
  64. data/lib/instructions/conversion/code_from_name.rb +10 -1
  65. data/lib/instructions/conversion/float_from_bool.rb +9 -0
  66. data/lib/instructions/conversion/float_from_int.rb +9 -0
  67. data/lib/instructions/conversion/int_from_bool.rb +9 -0
  68. data/lib/instructions/conversion/int_from_float.rb +9 -0
  69. data/lib/instructions/exec/exec_define.rb +9 -0
  70. data/lib/instructions/exec/exec_depth.rb +5 -0
  71. data/lib/instructions/exec/exec_do_count.rb +22 -0
  72. data/lib/instructions/exec/exec_do_range.rb +43 -0
  73. data/lib/instructions/exec/exec_do_times.rb +40 -0
  74. data/lib/instructions/exec/exec_duplicate.rb +7 -0
  75. data/lib/instructions/exec/exec_equal_q.rb +9 -0
  76. data/lib/instructions/exec/exec_flush.rb +5 -0
  77. data/lib/instructions/exec/exec_if.rb +8 -0
  78. data/lib/instructions/exec/exec_k.rb +4 -0
  79. data/lib/instructions/exec/exec_pop.rb +3 -0
  80. data/lib/instructions/exec/exec_rotate.rb +11 -0
  81. data/lib/instructions/exec/exec_s.rb +11 -0
  82. data/lib/instructions/exec/exec_shove.rb +14 -0
  83. data/lib/instructions/exec/exec_swap.rb +3 -0
  84. data/lib/instructions/exec/exec_y.rb +18 -0
  85. data/lib/instructions/exec/exec_yank.rb +12 -0
  86. data/lib/instructions/exec/exec_yankdup.rb +12 -0
  87. data/lib/instructions/float/float_abs.rb +8 -0
  88. data/lib/instructions/float/float_add.rb +8 -0
  89. data/lib/instructions/float/float_cosine.rb +8 -0
  90. data/lib/instructions/float/float_define.rb +9 -0
  91. data/lib/instructions/float/float_depth.rb +5 -0
  92. data/lib/instructions/float/float_divide.rb +12 -0
  93. data/lib/instructions/float/float_duplicate.rb +7 -0
  94. data/lib/instructions/float/float_equal_q.rb +8 -0
  95. data/lib/instructions/float/float_flush.rb +3 -0
  96. data/lib/instructions/float/float_greater_than_q.rb +9 -0
  97. data/lib/instructions/float/float_if.rb +8 -0
  98. data/lib/instructions/float/float_less_than_q.rb +9 -0
  99. data/lib/instructions/float/float_max.rb +8 -0
  100. data/lib/instructions/float/float_min.rb +8 -0
  101. data/lib/instructions/float/float_modulo.rb +12 -0
  102. data/lib/instructions/float/float_multiply.rb +8 -0
  103. data/lib/instructions/float/float_negative.rb +8 -0
  104. data/lib/instructions/float/float_pop.rb +3 -0
  105. data/lib/instructions/float/float_power.rb +12 -0
  106. data/lib/instructions/float/float_random.rb +3 -0
  107. data/lib/instructions/float/float_rotate.rb +11 -0
  108. data/lib/instructions/float/float_shove.rb +14 -0
  109. data/lib/instructions/float/float_sine.rb +8 -0
  110. data/lib/instructions/float/float_sqrt.rb +10 -0
  111. data/lib/instructions/float/float_subtract.rb +10 -0
  112. data/lib/instructions/float/float_swap.rb +3 -0
  113. data/lib/instructions/float/float_tangent.rb +8 -0
  114. data/lib/instructions/float/float_yank.rb +12 -0
  115. data/lib/instructions/float/float_yankdup.rb +12 -0
  116. data/lib/instructions/int/int_abs.rb +9 -1
  117. data/lib/instructions/int/int_add.rb +8 -0
  118. data/lib/instructions/int/int_define.rb +10 -1
  119. data/lib/instructions/int/int_depth.rb +5 -0
  120. data/lib/instructions/int/int_divide.rb +12 -0
  121. data/lib/instructions/int/int_duplicate.rb +7 -0
  122. data/lib/instructions/int/int_equal_q.rb +8 -0
  123. data/lib/instructions/int/int_flush.rb +3 -0
  124. data/lib/instructions/int/int_greater_than_q.rb +9 -0
  125. data/lib/instructions/int/int_if.rb +8 -0
  126. data/lib/instructions/int/int_less_than_q.rb +9 -0
  127. data/lib/instructions/int/int_max.rb +8 -0
  128. data/lib/instructions/int/int_min.rb +8 -0
  129. data/lib/instructions/int/int_modulo.rb +12 -0
  130. data/lib/instructions/int/int_multiply.rb +8 -0
  131. data/lib/instructions/int/int_negative.rb +8 -0
  132. data/lib/instructions/int/int_pop.rb +3 -0
  133. data/lib/instructions/int/int_power.rb +12 -0
  134. data/lib/instructions/int/int_random.rb +3 -0
  135. data/lib/instructions/int/int_rotate.rb +11 -0
  136. data/lib/instructions/int/int_shove.rb +14 -0
  137. data/lib/instructions/int/int_subtract.rb +10 -0
  138. data/lib/instructions/int/int_swap.rb +3 -0
  139. data/lib/instructions/int/int_yank.rb +14 -0
  140. data/lib/instructions/int/int_yankdup.rb +14 -0
  141. data/lib/instructions/name/name_depth.rb +5 -0
  142. data/lib/instructions/name/name_disable_lookup.rb +11 -0
  143. data/lib/instructions/name/name_duplicate.rb +7 -0
  144. data/lib/instructions/name/name_equal_q.rb +8 -0
  145. data/lib/instructions/name/name_flush.rb +3 -0
  146. data/lib/instructions/name/name_next.rb +7 -0
  147. data/lib/instructions/name/name_pop.rb +3 -0
  148. data/lib/instructions/name/name_random_bound.rb +9 -0
  149. data/lib/instructions/name/name_rotate.rb +11 -0
  150. data/lib/instructions/name/name_shove.rb +14 -0
  151. data/lib/instructions/name/name_swap.rb +3 -0
  152. data/lib/instructions/name/name_unbind.rb +7 -0
  153. data/lib/instructions/name/name_yank.rb +12 -0
  154. data/lib/instructions/name/name_yankdup.rb +12 -0
  155. data/spec/instructions/code/code_nth_cdr_spec.rb +10 -2
  156. metadata +3 -3
@@ -1,3 +1,14 @@
1
+ # Sets the value of the context attribute Interpreter#evaluate_references to false.
2
+ # This will persist until the next time the Interpreter evaluates a ReferencePoint;
3
+ # instead of attempting to look up the variable or name referred to by the ReferencePoint,
4
+ # it will instead push the ReferencePoint onto the +:name+ stack.
5
+ #
6
+ # needs: nothing
7
+ #
8
+ # pushes: nothing
9
+ #
10
+ #
11
+ #
1
12
  class NameDisableLookupInstruction < Instruction
2
13
  def preconditions?
3
14
  true
@@ -1,3 +1,10 @@
1
+ # makes and pushes a clone of the top item on the +:name+ stack
2
+ #
3
+ # *needs:* 1 +:name+
4
+ #
5
+ # *pushes:* 1 +:name+
6
+ #
7
+
1
8
  class NameDuplicateInstruction < Instruction
2
9
  include DuplicateInstruction
3
10
  def initialize(context)
@@ -1,3 +1,11 @@
1
+ # pops the top 2 items of the +:name+ stack;
2
+ # pushes a new ValuePoint onto the +:bool+ stack, with value +true+ if the names are identical
3
+ #
4
+ # *needs:* 2 +:name+
5
+ #
6
+ # *pushes:* 1 +:bool+
7
+ #
8
+
1
9
  class NameEqualQInstruction < Instruction
2
10
  def preconditions?
3
11
  needs :name, 2
@@ -1,3 +1,6 @@
1
+ # deletes all items from the +:name+ stack
2
+ #
3
+
1
4
  class NameFlushInstruction < Instruction
2
5
  include FlushInstruction
3
6
  def initialize(context)
@@ -1,3 +1,10 @@
1
+ # Creates and pushes a new ReferencePoint onto the +:name+ stack. The name itself
2
+ # will be a new string, obtained by invoking the context's Interpreter#next_name method.
3
+ #
4
+ # needs: nothing
5
+ #
6
+ # pushes: 1 +:name+
7
+
1
8
  class NameNextInstruction < Instruction
2
9
  def preconditions?
3
10
  true
@@ -1,3 +1,6 @@
1
+ # pops (and discards) the topmost item from the +:name+ stack
2
+ #
3
+
1
4
  class NamePopInstruction < Instruction
2
5
  include PopInstruction
3
6
  def initialize(context)
@@ -1,3 +1,12 @@
1
+ # Creates a new ReferencePoint and pushes it onto the +:name+ stack.
2
+ # The name will be randomly sampled (with uniform probability) from the union of all
3
+ # currently bound variables and names.
4
+ #
5
+ # needs: at least one bound variable or name
6
+ #
7
+ # pushes: 1 +:name+
8
+ #
9
+
1
10
  class NameRandomBoundInstruction < Instruction
2
11
  def preconditions?
3
12
  @context.references.length > 0
@@ -1,3 +1,14 @@
1
+ # pops the top 3 items of the +:name+ stack;
2
+ # pushes them back in _rotated_ order
3
+ #
4
+ # If they were A, B and C (with C originally at the top of the stack)
5
+ # the result will be B, C, A (with A at the top)
6
+ #
7
+ # *needs:* 3 +:name+
8
+ #
9
+ # *pushes:* 3 +:name+
10
+ #
11
+
1
12
  class NameRotateInstruction < Instruction
2
13
  include RotateInstruction
3
14
  def initialize(context)
@@ -1,3 +1,17 @@
1
+ # pops the top items of the +:name+ and +:int+ stacks;
2
+ # pushes the +:name+ down "into" the stack, at a level determined by the +:int+ "destination" value.
3
+ #
4
+ # If the destination value is negative or 0, the item stays on top;
5
+ # if the destination value is greater than or equal to the depth of the stack, the item goes to the bottom;
6
+ # otherwise, the item is inserted farther from the stack's top as the destination value increases.
7
+ #
8
+ # note: the destination depth is calculated after the items have been popped
9
+ #
10
+ # *needs:* 1 +:name+, 1 +:int+
11
+ #
12
+ # *pushes:* 1 +:name+ (sortof)
13
+ #
14
+
1
15
  class NameShoveInstruction < Instruction
2
16
  include ShoveInstruction
3
17
  def initialize(context)
@@ -1,3 +1,6 @@
1
+ # exchanges the position of the top 2 items on the +:name+ stack
2
+ #
3
+
1
4
  class NameSwapInstruction < Instruction
2
5
  include SwapInstruction
3
6
  def initialize(context)
@@ -1,3 +1,10 @@
1
+ # Pops the top +:name+ item, and if it is bound to a name (a local, not a variable)
2
+ # it removes that binding.
3
+ #
4
+ # needs: 1 +:name+
5
+ #
6
+ # pushes: nothing
7
+
1
8
  class NameUnbindInstruction < Instruction
2
9
  def preconditions?
3
10
  needs :name,1
@@ -1,3 +1,15 @@
1
+ # pops the top item of the +:int+ stack (the "index");
2
+ # then repositions an item from down "inside" the +:name+ stack to its top.
3
+ #
4
+ # If the index value is negative or 0, the bottom item on the stack is moved;
5
+ # if the index value is greater than or equal to the depth of the stack, there is no change;
6
+ # otherwise, the index value refers to the bottom-to-top order of stack items.
7
+ #
8
+ # *needs:* 1 +:int+, 1 +:name+
9
+ #
10
+ # *pushes:* 1 +:name+ (sortof)
11
+ #
12
+
1
13
  class NameYankInstruction < Instruction
2
14
  include YankInstruction
3
15
  def initialize(context)
@@ -1,3 +1,15 @@
1
+ # pops the top item of the +:int+ stack (the "index");
2
+ # pushes a duplicate of an item from down "inside" the +:name+ stack to its top.
3
+ #
4
+ # If the index value is negative or 0, the bottom item on the stack is copied;
5
+ # if the index value is greater than or equal to the depth of the stack, the top item is copied;
6
+ # otherwise, the index value refers to the bottom-to-top order of stack items.
7
+ #
8
+ # *needs:* 1 +:int+, 1 +:name+
9
+ #
10
+ # *pushes:* 1 +:name+ (sortof)
11
+ #
12
+
1
13
  class NameYankdupInstruction < Instruction
2
14
  include YankdupInstruction
3
15
  def initialize(context)
@@ -59,13 +59,21 @@ describe CodeNthCdrInstruction do
59
59
  @context.stacks[:code].peek.value.should == "block {}"
60
60
  end
61
61
 
62
- it "should wrap a non-codeblock point and just return it" do
63
- @context.stacks[:int].push(ValuePoint.new("int", 12))
62
+ it "should wrap a non-codeblock point and just return it if the index is less than 1" do
63
+ @context.stacks[:int].push(ValuePoint.new("int", -12))
64
64
  @context.stacks[:code].push(ValuePoint.new("code", "do x1"))
65
65
  @i1.go
66
66
  @context.stacks[:code].peek.value.should == "block {\n do x1}"
67
67
  end
68
68
 
69
+ it "should return an empty block if the index is positive" do
70
+ @context.stacks[:int].push(ValuePoint.new("int", 12))
71
+ @context.stacks[:code].push(ValuePoint.new("code", "do x1"))
72
+ @i1.go
73
+ @context.stacks[:code].peek.value.should == "block {}"
74
+ end
75
+
76
+
69
77
  it "should not remove anything if the int % length == 0" do
70
78
  @context.stacks[:int].push(ValuePoint.new("int", -921231)) # => 0
71
79
  @context.stacks[:code].push(ValuePoint.new("code", "block {ref a ref b ref c}"))
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 2
8
- - 6
9
- version: 0.2.6
8
+ - 7
9
+ version: 0.2.7
10
10
  platform: ruby
11
11
  authors:
12
12
  - Bill Tozier
@@ -16,7 +16,7 @@ autorequire:
16
16
  bindir: bin
17
17
  cert_chain: []
18
18
 
19
- date: 2010-04-30 00:00:00 -04:00
19
+ date: 2010-05-02 00:00:00 -04:00
20
20
  default_executable: nudge
21
21
  dependencies:
22
22
  - !ruby/object:Gem::Dependency