Sha256: 5100e2c3d9a7f3a30ed629ec31f8ed5b7a11f0d3e1f4b22264f25dc0cf8f551b

Contents?: true

Size: 1.89 KB

Versions: 5

Compression:

Stored size: 1.89 KB

Contents

# This file contains a suite of tests for the Calc grammar found in calc.citrus.

require 'citrus'
Citrus.require File.expand_path('../calc', __FILE__)
require 'test/unit'

class CalcTest < Test::Unit::TestCase
  # A helper method that tests the successful parsing and evaluation of the
  # given mathematical expression.
  def do_test(expr)
    match = ::Calc.parse(expr)
    assert(match)
    assert_equal(expr, match)
    assert_equal(expr.length, match.length)
    assert_equal(eval(expr), match.value)
  end

  def test_int
    do_test('3')
  end

  def test_float
    do_test('1.5')
  end

  def test_addition
    do_test('1+2')
  end

  def test_addition_multi
    do_test('1+2+3')
  end

  def test_addition_float
    do_test('1.5+3')
  end

  def test_subtraction
    do_test('3-2')
  end

  def test_subtraction_float
    do_test('4.5-3')
  end

  def test_multiplication
    do_test('2*5')
  end

  def test_multiplication_float
    do_test('1.5*3')
  end

  def test_division
    do_test('20/5')
  end

  def test_division_float
    do_test('4.5/3')
  end

  def test_complex
    do_test('7*4+3.5*(4.5/3)')
  end

  def test_complex_spaced
    do_test('7 * 4 + 3.5 * (4.5 / 3)')
  end

  def test_complex_with_underscores
    do_test('(12_000 / 3) * 2.5')
  end

  def test_modulo
    do_test('3 % 2 + 4')
  end

  def test_exponent
    do_test('2**9')
  end

  def test_exponent_float
    do_test('2**2.2')
  end

  def test_negative_exponent
    do_test('2**-3')
  end

  def test_exponent_exponent
    do_test('2**2**2')
  end

  def test_exponent_group
    do_test('2**(3+1)')
  end

  def test_negative
    do_test('-5')
  end

  def test_double_negative
    do_test('--5')
  end

  def test_complement
    do_test('~4')
  end

  def test_double_complement
    do_test('~~4')
  end

  def test_mixed_unary
    do_test('~-4')
  end

  def test_complex_with_negatives
    do_test('4 * -7 / (8.0 + 1_2)**2')
  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
citrus-2.3.7 examples/calc_test.rb
citrus-2.3.6 examples/calc_test.rb
citrus-2.3.5 examples/calc_test.rb
citrus-2.3.4 examples/calc.rb
citrus-2.3.3 examples/calc.rb