#!/usr/bin/env ruby
#--
# Colour management with Ruby.
#
# Copyright 2005 Austin Ziegler
#   http://rubyforge.org/ruby-pdf/
#
#   Licensed under a MIT-style licence.
#
# $Id: test_hsl.rb 130 2005-08-08 02:57:36Z austin $
#++

$LOAD_PATH.unshift("#{File.dirname(__FILE__)}/../lib") if __FILE__ == $0
require 'test/unit' unless defined? $ZENTEST and $ZENTEST
require 'color'

module TestColor
  class TestHSL < Test::Unit::TestCase
    def setup
      @hsl = Color::HSL.new(145, 20, 30)
    end

    def brightness
      assert_in_delta(0.3, @hsl.brightness, 1e-4)
    end

    def test_h
      assert_in_delta(0.4027, @hsl.h, 1e-4)
    end

    def test_h_equals
      assert_in_delta(0.4027, @hsl.h, 1e-4)
      assert_nothing_raised { @hsl.h = 0.33 }
      assert_in_delta(0.33, @hsl.h, 1e-4)
      assert_nothing_raised { @hsl.h = 3.3 }
      assert_in_delta(1.0, @hsl.h, 1e-4)
      assert_nothing_raised { @hsl.h = -3.3 }
      assert_in_delta(0.0, @hsl.h, 1e-4)
    end

    def test_html
      assert_equal("#3d5c4a", @hsl.html)
    end

    def test_l
      assert_in_delta(0.3, @hsl.l, 1e-4)
    end

    def test_l_equals
      assert_in_delta(0.3, @hsl.l, 1e-4)
      assert_nothing_raised { @hsl.l = 0.33 }
      assert_in_delta(0.33, @hsl.l, 1e-4)
      assert_nothing_raised { @hsl.l = 3.3 }
      assert_in_delta(1.0, @hsl.l, 1e-4)
      assert_nothing_raised { @hsl.l = -3.3 }
      assert_in_delta(0.0, @hsl.l, 1e-4)
    end

    def test_s
      assert_in_delta(0.2, @hsl.s, 1e-4)
    end

    def test_s_equals
      assert_in_delta(0.2, @hsl.s, 1e-4)
      assert_nothing_raised { @hsl.s = 0.33 }
      assert_in_delta(0.33, @hsl.s, 1e-4)
      assert_nothing_raised { @hsl.s = 3.3 }
      assert_in_delta(1.0, @hsl.s, 1e-4)
      assert_nothing_raised { @hsl.s = -3.3 }
      assert_in_delta(0.0, @hsl.s, 1e-4)
    end

    def test_to_cmyk
      assert_kind_of(Color::CMYK, @hsl.to_cmyk)
    end

    def test_to_grayscale
      assert_kind_of(Color::GrayScale, @hsl.to_grayscale)
    end

    def test_to_greyscale
      assert_kind_of(Color::GreyScale, @hsl.to_greyscale)
    end

    def test_to_rgb
      assert_kind_of(Color::RGB, @hsl.to_rgb)
    end

    def test_to_yiq
      assert_kind_of(Color::YIQ, @hsl.to_yiq)
    end
  end
end
