Implement TODO about gain maps in are_images_equal (#3028)

diff --git a/tests/gtest/are_images_equal.cc b/tests/gtest/are_images_equal.cc
index 11231a9..e5d5e9e 100644
--- a/tests/gtest/are_images_equal.cc
+++ b/tests/gtest/are_images_equal.cc
@@ -13,11 +13,15 @@
 using avif::ImagePtr;
 
 int main(int argc, char** argv) {
-  if (argc != 4 && argc != 5) {
+  if (argc != 4 && argc != 5 && argc != 6) {
     std::cerr << "Wrong argument: " << argv[0]
-              << " file1 file2 ignore_alpha_flag [psnr_threshold]" << std::endl;
+              << " file1 file2 ignore_alpha_flag [psnr_threshold] "
+                 "[ignore_gain_map_flag]"
+              << std::endl;
     return 2;
   }
+  const bool ignore_gain_map = argc > 5 && std::stoi(argv[5]) != 0;
+
   ImagePtr decoded[2] = {ImagePtr(avifImageCreateEmpty()),
                          ImagePtr(avifImageCreateEmpty())};
   if (!decoded[0] || !decoded[1]) {
@@ -31,18 +35,15 @@
   for (int i : {0, 1}) {
     // Make sure no color conversion happens.
     decoded[i]->matrixCoefficients = AVIF_MATRIX_COEFFICIENTS_IDENTITY;
-    if (avifReadImage(argv[i + 1],
-                      AVIF_APP_FILE_FORMAT_UNKNOWN /* guess format */,
-                      requestedFormat, kRequestedDepth,
-                      AVIF_CHROMA_DOWNSAMPLING_AUTOMATIC,
-                      /*ignoreColorProfile==*/AVIF_FALSE,
-                      /*ignoreExif=*/AVIF_FALSE,
-                      /*ignoreXMP=*/AVIF_FALSE,
-                      // TODO(maryla): also compare gain maps.
-                      /*ignoreGainMap=*/AVIF_TRUE,
-                      /*imageSizeLimit=*/std::numeric_limits<uint32_t>::max(),
-                      decoded[i].get(), &depth[i], nullptr,
-                      nullptr) == AVIF_APP_FILE_FORMAT_UNKNOWN) {
+    if (avifReadImage(
+            argv[i + 1], AVIF_APP_FILE_FORMAT_UNKNOWN /* guess format */,
+            requestedFormat, kRequestedDepth,
+            AVIF_CHROMA_DOWNSAMPLING_AUTOMATIC,
+            /*ignoreColorProfile==*/AVIF_FALSE, /*ignoreExif=*/AVIF_FALSE,
+            /*ignoreXMP=*/AVIF_FALSE, ignore_gain_map,
+            /*imageSizeLimit=*/std::numeric_limits<uint32_t>::max(),
+            decoded[i].get(), &depth[i], nullptr,
+            nullptr) == AVIF_APP_FILE_FORMAT_UNKNOWN) {
       std::cerr << "Image " << argv[i + 1] << " cannot be read." << std::endl;
       return 2;
     }
diff --git a/tests/test_cmd_avifgainmaputil.sh b/tests/test_cmd_avifgainmaputil.sh
index 754bb2c..d339aac 100755
--- a/tests/test_cmd_avifgainmaputil.sh
+++ b/tests/test_cmd_avifgainmaputil.sh
@@ -68,6 +68,10 @@
   "${AVIFGAINMAPUTIL}" convert "${INPUT_JPEG_AVIF_GAINMAP_SDR}" "${AVIF_OUTPUT}" --swap-base && exit 1
   "${AVIFGAINMAPUTIL}" convert "${INPUT_JPEG_AVIF_GAINMAP_SDR}" "${AVIF_OUTPUT}" --swap-base --ignore-profile \
       --cicp 2/3/4
+
+   # also test the are_images_equal binary itself with some gain maps
+  "${ARE_IMAGES_EQUAL}" "${INPUT_JPEG_AVIF_GAINMAP_SDR}" "${INPUT_JPEG_AVIF_GAINMAP_SDR}" 0 40 0
+  "${ARE_IMAGES_EQUAL}" "${INPUT_JPEG_AVIF_GAINMAP_SDR}" "${INPUT_JPEG_AVIF_GAINMAP_SDR}" 0 40 1
 popd
 
 exit 0