nudge 0.2.6 → 0.2.7

Sign up to get free protection for your applications and to get access to all the features.
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