require 'test/unit'

require 'fox'

include Fox

class TC_FXMaterial < Test::Unit::TestCase

  DELTA = 1.0e-6
  
  def setup
    @mat = FXMaterial.new
  end
  
  def test_ambient
    @mat.ambient = [0.5, 0.6, 0.7, 0.8]
    assert_in_delta(0.5, @mat.ambient[0], DELTA)
    assert_in_delta(0.6, @mat.ambient[1], DELTA)
    assert_in_delta(0.7, @mat.ambient[2], DELTA)
    assert_in_delta(0.8, @mat.ambient[3], DELTA)

    @mat.ambient = FXHVec.new(0.5, 0.6, 0.7, 0.8)
    assert_in_delta(0.5, @mat.ambient[0], DELTA)
    assert_in_delta(0.6, @mat.ambient[1], DELTA)
    assert_in_delta(0.7, @mat.ambient[2], DELTA)
    assert_in_delta(0.8, @mat.ambient[3], DELTA)
  end
  
  def test_diffuse
    @mat.diffuse = [0.5, 0.6, 0.7, 0.8]
    assert_in_delta(0.5, @mat.diffuse[0], DELTA)
    assert_in_delta(0.6, @mat.diffuse[1], DELTA)
    assert_in_delta(0.7, @mat.diffuse[2], DELTA)
    assert_in_delta(0.8, @mat.diffuse[3], DELTA)

    @mat.diffuse = FXHVec.new(0.5, 0.6, 0.7, 0.8)
    assert_in_delta(0.5, @mat.diffuse[0], DELTA)
    assert_in_delta(0.6, @mat.diffuse[1], DELTA)
    assert_in_delta(0.7, @mat.diffuse[2], DELTA)
    assert_in_delta(0.8, @mat.diffuse[3], DELTA)
  end
  
  def test_emission
    @mat.emission = [0.5, 0.6, 0.7, 0.8]
    assert_in_delta(0.5, @mat.emission[0], DELTA)
    assert_in_delta(0.6, @mat.emission[1], DELTA)
    assert_in_delta(0.7, @mat.emission[2], DELTA)
    assert_in_delta(0.8, @mat.emission[3], DELTA)

    @mat.emission = FXHVec.new(0.5, 0.6, 0.7, 0.8)
    assert_in_delta(0.5, @mat.emission[0], DELTA)
    assert_in_delta(0.6, @mat.emission[1], DELTA)
    assert_in_delta(0.7, @mat.emission[2], DELTA)
    assert_in_delta(0.8, @mat.emission[3], DELTA)
  end
  
  def test_emission
    @mat.emission = [0.5, 0.6, 0.7, 0.8]
    assert_in_delta(0.5, @mat.emission[0], DELTA)
    assert_in_delta(0.6, @mat.emission[1], DELTA)
    assert_in_delta(0.7, @mat.emission[2], DELTA)
    assert_in_delta(0.8, @mat.emission[3], DELTA)

    @mat.emission = FXHVec.new(0.5, 0.6, 0.7, 0.8)
    assert_in_delta(0.5, @mat.emission[0], DELTA)
    assert_in_delta(0.6, @mat.emission[1], DELTA)
    assert_in_delta(0.7, @mat.emission[2], DELTA)
    assert_in_delta(0.8, @mat.emission[3], DELTA)
  end
  
  def test_shininess
    @mat.shininess = 0.5
    assert_in_delta(0.5, @mat.shininess, DELTA)
  end
end
