test_closest_color_name Subroutine

public subroutine test_closest_color_name()

Arguments

None

Contents


Subroutines

subroutine check_name(name, rgb)

Arguments

Type IntentOptional Attributes Name
character(len=*) :: name
integer, intent(in) :: rgb(3)

Source Code

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