From b25b6db94b2909d605c51a2a44a92f4b8bf34a69 Mon Sep 17 00:00:00 2001
From: Mickael GUIBERT <mickael.guibert@cea.fr>
Date: Tue, 1 Apr 2025 08:05:09 +0000
Subject: [PATCH] [Feat] Adaptation of the Aidge_cmp function for an integer
 datatype

---
 aidge_export_cpp/static/utils.hpp | 28 ++++++++++++++++++++++++++--
 1 file changed, 26 insertions(+), 2 deletions(-)

diff --git a/aidge_export_cpp/static/utils.hpp b/aidge_export_cpp/static/utils.hpp
index 8316e5e..e3776a3 100644
--- a/aidge_export_cpp/static/utils.hpp
+++ b/aidge_export_cpp/static/utils.hpp
@@ -144,7 +144,8 @@ inline void saveOutputs(
 #if AIDGE_CMP
 
 template<int NB_OUTPUTS, int OUT_WIDTH, int OUT_HEIGHT, typename AidgeOutput_T, typename DevOutput_T>
-void aidge_cmp(std::string layer_name, AidgeOutput_T* aidge_output, DevOutput_T* dev_output) {
+typename std::enable_if<std::is_floating_point<DevOutput_T>::value>::type 
+aidge_cmp(std::string layer_name, AidgeOutput_T* aidge_output, DevOutput_T* dev_output) {
 
     printf("[AIDGE COMPARE] - %s\n", layer_name.c_str());
 
@@ -154,7 +155,30 @@ void aidge_cmp(std::string layer_name, AidgeOutput_T* aidge_output, DevOutput_T*
                 const int aidge_ofst = out * OUT_HEIGHT * OUT_WIDTH + h * OUT_WIDTH + w;
                 const int dev_ofst = h * OUT_WIDTH * NB_OUTPUTS + w * NB_OUTPUTS + out;
                 if (aidge_output[aidge_ofst] != dev_output[dev_ofst]) {
-                    printf("[ERROR] - First error detected at %dx%dx%d (out x h x w) : aidge_out = %d vs dev_out = %d\n",
+                    printf("[ERROR] - (float) First error detected at %dx%dx%d (out x h x w) : aidge_out = %f vs dev_out = %f\n",
+                            out, h, w, aidge_output[aidge_ofst], dev_output[dev_ofst]);                
+                    printf("Abort program.\n");
+                    exit(1);
+                }
+            }
+        }
+    }
+    printf("[SUCCESS]\n\n");
+}
+
+template<int NB_OUTPUTS, int OUT_WIDTH, int OUT_HEIGHT, typename AidgeOutput_T, typename DevOutput_T>
+typename std::enable_if<std::is_integral<DevOutput_T>::value>::type 
+aidge_cmp(std::string layer_name, AidgeOutput_T* aidge_output, DevOutput_T* dev_output) {
+
+    printf("[AIDGE COMPARE] - %s\n", layer_name.c_str());
+
+    for (auto out = 0; out < NB_OUTPUTS; ++out) {
+        for (auto h = 0; h < OUT_HEIGHT; ++h) {
+            for (auto w = 0; w < OUT_WIDTH; ++w) {
+                const int aidge_ofst = out * OUT_HEIGHT * OUT_WIDTH + h * OUT_WIDTH + w;
+                const int dev_ofst = h * OUT_WIDTH * NB_OUTPUTS + w * NB_OUTPUTS + out;
+                if (aidge_output[aidge_ofst] != dev_output[dev_ofst]) {
+                    printf("[ERROR] - (float) First error detected at %dx%dx%d (out x h x w) : aidge_out = %d vs dev_out = %d\n",
                            out, h, w, aidge_output[aidge_ofst], dev_output[dev_ofst]);
                     printf("Abort program.\n");
                     exit(1);
-- 
GitLab