subroutine test_closest_color_name()
call unit_check_start('closest_color_name')
! NAME RGB(0-255)
call check_name('black', [ 0, 0, 0 ])
call check_name('blue', [ 0, 0, 100 ])
call check_name('cyan', [ 0, 100, 100 ])
call check_name('gray50', [ 50, 50, 50 ])
call check_name('green', [ 0, 100, 0 ])
call check_name('magenta', [ 100, 0, 100 ])
call check_name('magenta4', [ 55, 0, 55 ])
call check_name('maroon', [ 69, 19, 38 ])
call check_name('navy', [ 0, 0, 50 ])
call check_name('olive', [ 50, 50, 0 ])
call check_name('orange', [ 100, 65, 0 ])
call check_name('purple', [ 63, 13, 94 ])
call check_name('red', [ 100, 0, 0 ])
call check_name('red4', [ 55, 0, 0 ])
call check_name('silver', [ 75, 75, 75 ])
call check_name('teal', [ 0, 50, 50 ])
call check_name('white', [ 100, 100, 100 ])
call check_name('yellow', [ 100, 100, 0 ])
call check_name('lime', [ 0, 100, 0 ])
call unit_check_done('closest_color_name')
contains
subroutine check_name(name,rgb)
! given a colorname look up RGB values, compare to expected values, check
character(len=*) :: name
integer,intent(in) :: rgb(3)
real :: r, g, b
real :: r2,g2,b2
character(len=20) :: echoname
character(len=20) :: closestname
r=real(rgb(1))
g=real(rgb(2))
b=real(rgb(3))
! see if get expected name
call closest_color_name(r,g,b,closestname)
if(closestname.eq.name)then
call unit_check('closest_color_name',closestname.eq.name,msg='names match for '//name)
else
! did not get back name put in; but maybe alternate alias
! if values the same assume OK
call color_name2rgb(name,r2,g2,b2,echoname)
call unit_check('closest_color_name', &
& rgb(1) .eq. int(r2+0.5) .and. &
& rgb(2) .eq. int(g2+0.5) .and. &
& rgb(3) .eq. int(b2+0.5) ,msg='close enough for NAME: '//trim(name)//' CLOSESTNAME: '//trim(closestname) )
endif
end subroutine check_name
!===================================================================================================================================
end subroutine test_closest_color_name