       assert RPNForthThing.initialize(~w[ 5 5 <> ]) == 0
       assert RPNForthThing.initialize(~w[ 5 4 < ]) == 0
       assert RPNForthThing.initialize(~w[ 5 4 > ]) != 0
+      assert RPNForthThing.initialize(~w[ 5 5 >= ]) == 1
+      assert RPNForthThing.initialize(~w[ 5 5 <= ]) == 1
     end
 
     test "increment and decrement" do

  # anything else is true... although typically a 1 is returned
  # for truths, boolean tests should compare with 0 (falsity) instead of 1

  def compute([ "=" | remaining_input], [y, x | data_stack], loop_stack, dict) do
    out = if y == x, do: 1, else: 0
    compute(remaining_input, [out | data_stack], loop_stack, dict)
  end

  def compute([ "<>" | remaining_input], [y, x | data_stack], loop_stack, dict) do
    out = if y != x, do: 1, else: 0
    compute(remaining_input, [out | data_stack], loop_stack, dict)
  end

  def compute([ "<" | remaining_input], [y, x | data_stack], loop_stack, dict) do
    out = if x < y, do: 1, else: 0
    compute(remaining_input, [out | data_stack], loop_stack, dict)
  end

  def compute([ ">" | remaining_input], [y, x | data_stack], loop_stack, dict) do
    out = if x > y, do: 1, else: 0
    compute(remaining_input, [out | data_stack], loop_stack, dict)
  end

  def compute([ "and" | remaining_input], [y, x | data_stack], loop_stack, dict) do
    out = if ((y != 0) and (x != 0)), do: 1, else: 0
    compute(remaining_input, [out | data_stack], loop_stack, dict)
  end

  def compute([ "or" | remaining_input], [y, x | data_stack], loop_stack, dict) do
    out = if ((y != 0) or (x != 0)), do: 1, else: 0
    compute(remaining_input, [out | data_stack], loop_stack, dict)
  end

  def compute([ "not" | remaining_input], [x | data_stack], loop_stack, dict) do
    out = if x == 0, do: 1, else: 0
    compute(remaining_input, [out | data_stack], loop_stack, dict)
  end

  # def compute([ "?" | remaining_input], data_stack, loop_stack, dict) do
  #   compute([ "if" | remaining_input], data_stack, loop_stack, dict)
  # end

  # If-Else-Then
  # Note that this is a prefix function!
  # Usage: test_val is on top of data_stack. "if <then-clause> else <else-clause> then"
  # puts then-clause on top of instruction data_stack if test_val != 0, else-clause if test_val == 0.
  def compute([ "if" | remaining_input], [x | data_stack], loop_stack, dict) do
    {if_and_possibly_else_clause, ["then" | remaining_input]} = Enum.split_while(remaining_input, fn(ins) -> ins != "then" end)
    {if_clause, else_clause} =
      if Enum.any?(if_and_possibly_else_clause, fn ins -> ins == "else" end) do

        {if_and_possibly_else_clause, []}
      end
    if x != 0 do
      compute(if_clause ++ remaining_input, data_stack, return_stack, dict)
    else
      compute(else_clause ++ remaining_input, data_stack, return_stack, dict)
    end
  end

