#!/bin/sh
#
#  Copyright 1999-2019 ImageMagick Studio LLC, a non-profit organization
#  dedicated to making software imaging solutions freely available.
#
#  You may not use this file except in compliance with the License.  You may
#  obtain a copy of the License at
#
#    https://imagemagick.org/script/license.php
#
#  Unless required by applicable law or agreed to in writing, software
#  distributed under the License is distributed on an "AS IS" BASIS,
#  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
#  See the License for the specific language governing permissions and
#  limitations under the License.
#
. ./common.shi
. ${srcdir}/tests/common.shi

depth=`eval ${MAGICK} xc:none -format '%[fx:QuantumRange]' info:-`
if [ "X$depth" = "X255" ]; then
  echo "1..1"
  echo "ok"
  exit 0
fi
echo "1..19"

# how to generate a one pixel (average rose) color and output its values
in="rose: -scale 1x1"    # a one pixel image of the average color.
out="-format '%[fx:int(255*r+.5)],%[fx:int(255*g+.5)],%[fx:int(255*b+.5)]' info:-"

# ----------------

# Colors to compare results to.
error=false
average=`eval ${MAGICK} "$in" -noop "$out"`
too_dark=`eval ${MAGICK} "$in" -colorspace RGB "$out"`
too_light=`eval ${MAGICK} "$in" -set colorspace RGB -colorspace sRGB "$out"`
format='%-30s%s\n'        # results formating
format2='%-30s%-14s%s\n'

printf "$format2" "Average \"rose:\" Color"  "$average" "sRGB(rose)"
printf "$format2" "Too Dark Color"  "$too_dark"  "sRGB(rose)->RGB result"
printf "$format2" "Too Light Color" "$too_light" "RGB(rose)->sRGB result"
echo ''

#
# Sanity checks
#
# NOTE: as a extra validation on sanity checks below...
#    eval ${MAGICK} "$in" -gamma .454545 "$out"
# produces a value of  74,25,20   which is close to 73,26,21 below.
#    eval ${MAGICK} "$in" -gamma 2.2 "$out"
# produces a value of  198,158,151  whcih is close to 199,160,152 below.
#
# Actual values used below come from IM v6.5.4-7 colorspace conversions
#
error=false
if [ "X$average" != "X146,89,80" ]; then
  echo "Sanity Failure: Average expected to be 145,89,80 - ABORTING"
  error=true
fi
if [ "X$too_dark" != "X73,26,21" ]; then
  echo "Sanity Failure: Too Dark expected to be 73,26,21 - ABORTING"
  error=true
fi
if [ "X$too_light" != "X199,160,152" ]; then
  echo "Sanity Failure: Too Light expected to be 199,160,152 - ABORTING"
  error=true
fi
$error && exit 1

test_color() {
  test="sRGB"
  cs='';
  for i in "$@"; do
    test="${test}->$i"        # format of the test being performed
    cs="$cs -colorspace $i"   # colorspace operations to perform test
  done
  color=`eval ${MAGICK} "$in" $cs "$out"`

  if [ "X$color" = "X$average" ]; then
    return 0
  fi
  # Its failed the round-trip test, now report how it failed!
  error=true
  if [ "X$color" = "X$too_light" ]; then
    return 1
  fi
  if [ "X$color" = "X$too_dark" ]; then
    return 1
  fi
  return 1
}

# ----------------

test_color RGB     sRGB && echo "ok" || echo "not ok"

test_color XYZ     sRGB && echo "ok" || echo "not ok"
test_color XYZ RGB sRGB && echo "ok" || echo "not ok"
test_color RGB XYZ sRGB && echo "ok" || echo "not ok"

test_color LAB     sRGB && echo "ok" || echo "not ok"
test_color XYZ LAB sRGB && echo "ok" || echo "not ok"
test_color LAB XYZ sRGB && echo "ok" || echo "not ok"
test_color RGB LAB sRGB && echo "ok" || echo "not ok"
test_color LAB RGB sRGB && echo "ok" || echo "not ok"

test_color CMY   sRGB && echo "ok" || echo "not ok"
test_color CMYK  sRGB && echo "ok" || echo "not ok"
test_color HSL   sRGB && echo "ok" || echo "not ok"
test_color HSB   sRGB && echo "ok" || echo "not ok"
test_color HWB   sRGB && echo "ok" || echo "not ok"
test_color Log   sRGB && echo "ok" || echo "not ok"
test_color YIQ   sRGB && echo "ok" || echo "not ok"
test_color YUV   sRGB && echo "ok" || echo "not ok"
test_color YCbCr sRGB && echo "ok" || echo "not ok"
test_color OHTA  sRGB && echo "ok" || echo "not ok"
:
