PR #24638 opened by Kacper Michajłow (kasper93)
URL: https://code.ffmpeg.org/FFmpeg/FFmpeg/pulls/24638
Patch URL: https://code.ffmpeg.org/FFmpeg/FFmpeg/pulls/24638.patch


From 1776b45c67d1103266e448d55e6e7a90dd0330e7 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Kacper=20Michaj=C5=82ow?= <[email protected]>
Date: Tue, 22 Sep 2026 18:21:06 +0200
Subject: [PATCH 01/11] avutil/tests/rational: return failure on any reported
 mismatch
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Only the av_add_stable() and av_q2intfloat() loops returned nonzero.
Every other check logged the mismatch and the test still exited with 0,
so it could never fail under FATE.

Signed-off-by: Kacper Michajłow <[email protected]>
---
 libavutil/tests/rational.c | 24 ++++++++++++++++++++----
 1 file changed, 20 insertions(+), 4 deletions(-)

diff --git a/libavutil/tests/rational.c b/libavutil/tests/rational.c
index 69a8e896f7..1ab25df48e 100644
--- a/libavutil/tests/rational.c
+++ b/libavutil/tests/rational.c
@@ -29,6 +29,7 @@ int main(void)
     AVRational a,b,r;
     AVRational64 a64,b64,r64;
     int i,j,k;
+    int ret = 0;
     static const int64_t numlist[] = {
         INT64_MIN, INT64_MIN+1, INT64_MAX, INT32_MIN, INT32_MAX, 1,0,-1,
         123456789, INT32_MAX-1, INT32_MAX+1LL, UINT32_MAX-1, UINT32_MAX, 
UINT32_MAX+1LL
@@ -44,12 +45,16 @@ int main(void)
                     if (d > 0)       d = 1;
                     else if (d < 0)  d = -1;
                     else if (d != d) d = INT_MIN;
-                    if (c != d)
+                    if (c != d) {
                         av_log(NULL, AV_LOG_ERROR, "%d/%d %d/%d, %d %f\n", 
a.num,
                                a.den, b.num, b.den, c,d);
+                        ret = 1;
+                    }
                     r = av_sub_q(av_add_q(b,a), b);
-                    if(b.den && (r.num*a.den != a.num*r.den || !r.num != 
!a.num || !r.den != !a.den))
+                    if(b.den && (r.num*a.den != a.num*r.den || !r.num != 
!a.num || !r.den != !a.den)) {
                         av_log(NULL, AV_LOG_ERROR, "%d/%d ", r.num, r.den);
+                        ret = 1;
+                    }
                 }
             }
         }
@@ -66,10 +71,12 @@ int main(void)
                                   adbl >  bdbl ?  1 :
                                   adbl <  bdbl ? -1 : INT_MIN;
 
-                    if (c != d)
+                    if (c != d) {
                         av_log(NULL, AV_LOG_ERROR, "%lld/%lld %lld/%lld, %d != 
%d\n",
                                (long long) a64.num, (long long) a64.den,
                                (long long) b64.num, (long long) b64.den, c,d);
+                        ret = 1;
+                    }
 
                     // Check arithmetic result
                     if (a64.den && b64.den) {
@@ -80,6 +87,7 @@ int main(void)
                         if (rdbl != adbl + bdbl) {
                             av_log(NULL, AV_LOG_ERROR, "%f + %f = %f != %f\n",
                                    adbl, bdbl, rdbl, adbl + bdbl);
+                            ret = 1;
                         }
 
                         r64 = av_mul_q64(a64, b64);
@@ -87,6 +95,7 @@ int main(void)
                         if (rdbl != adbl * bdbl) {
                             av_log(NULL, AV_LOG_ERROR, "%f * %f = %f != %f\n",
                                    adbl, bdbl, rdbl, adbl * bdbl);
+                            ret = 1;
                         }
                     }
 
@@ -99,6 +108,7 @@ int main(void)
                         av_log(NULL, AV_LOG_ERROR, "%lld/%lld != %lld/%lld\n",
                                (long long) a64.num, (long long) a64.den,
                                (long long) r64.num, (long long) r64.den);
+                        ret = 1;
                     }
 
                     if (b64.num) {
@@ -111,6 +121,7 @@ int main(void)
                             av_log(NULL, AV_LOG_ERROR, "%lld/%lld != 
%lld/%lld\n",
                                    (long long) a64.num, (long long) a64.den,
                                    (long long) r64.num, (long long) r64.den);
+                            ret = 1;
                         }
                     }
                 }
@@ -141,6 +152,7 @@ int main(void)
             if (r.num != c.num || r.den != c.den) {
                 av_log(NULL, AV_LOG_ERROR, "%d/%d * %d/%d = %d/%d, expected 
%d/%d\n",
                        a.num, a.den, b.num, b.den, r.num, r.den, c.num, c.den);
+                ret = 1;
             }
         }
     }
@@ -167,6 +179,7 @@ int main(void)
             if (r.num != c.num || r.den != c.den) {
                 av_log(NULL, AV_LOG_ERROR, "%d/%d + %d/%d = %d/%d, expected 
%d/%d\n",
                        a.num, a.den, b.num, b.den, r.num, r.den, c.num, c.den);
+                ret = 1;
             }
         }
     }
@@ -196,6 +209,7 @@ int main(void)
                        (long long) b.num, (long long) b.den,
                        (long long) r.num, (long long) r.den,
                        (long long) c.num, (long long) c.den);
+                ret = 1;
             }
         }
     }
@@ -225,6 +239,7 @@ int main(void)
                        (long long) b.num, (long long) b.den,
                        (long long) r.num, (long long) r.den,
                        (long long) c.num, (long long) c.den);
+                ret = 1;
             }
         }
     }
@@ -260,6 +275,7 @@ int main(void)
                     continue;
 
                 av_log(NULL, AV_LOG_ERROR, "%"PRId64" * %"PRId64" / %"PRId64" 
= %"PRId64" or %"PRId64"\n", a,b,c, res, av_i2int(ai));
+                ret = 1;
             }
         }
     }
@@ -307,5 +323,5 @@ int main(void)
         }
     }
 
-    return 0;
+    return ret;
 }
-- 
2.52.0


From f7a5cfcd85dd656e7c9f38e24c5ba864851b0c0a Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Kacper=20Michaj=C5=82ow?= <[email protected]>
Date: Tue, 22 Sep 2026 18:32:54 +0200
Subject: [PATCH 02/11] avutil/tests/log: initialize the console state before
 forcing use_color
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

The test assigns use_color directly, which skips check_color_terminal().
On Windows the console handle then stays NULL and WriteConsoleW()
silently drops every line, so the test printed nothing at all.

Signed-off-by: Kacper Michajłow <[email protected]>
---
 libavutil/tests/log.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/libavutil/tests/log.c b/libavutil/tests/log.c
index 8fe9461c1b..d8c792982d 100644
--- a/libavutil/tests/log.c
+++ b/libavutil/tests/log.c
@@ -38,6 +38,7 @@ int main(int argc, char **argv)
 {
     int i;
     av_log_set_level(AV_LOG_DEBUG);
+    check_color_terminal();
     for (use_color=0; use_color<=256; use_color = 255*use_color+1) {
         av_log(NULL, AV_LOG_FATAL, "use_color: %d\n", use_color);
         for (i = AV_LOG_DEBUG; i>=AV_LOG_QUIET; i-=8) {
-- 
2.52.0


From d1dca2deea3bf7f29f99525a69f9c12f47d63bf1 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Kacper=20Michaj=C5=82ow?= <[email protected]>
Date: Tue, 22 Sep 2026 18:34:17 +0200
Subject: [PATCH 03/11] avutil/tests/pca: fix unsigned wraparound in the
 generated samples
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

av_lfg_get() % 101 - 50 is evaluated as unsigned. Assigned to an int it
wraps back to the intended range, but v[0] is a double and received
values near 4e9, which put the covariances around 4e18.

Signed-off-by: Kacper Michajłow <[email protected]>
---
 libavutil/tests/pca.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/libavutil/tests/pca.c b/libavutil/tests/pca.c
index a2a620799a..fcf59759db 100644
--- a/libavutil/tests/pca.c
+++ b/libavutil/tests/pca.c
@@ -41,8 +41,8 @@ int main(void){
         double v[2*LEN+100];
 //        double sum=0;
         int pos = av_lfg_get(&prng) % LEN;
-        int v2  = av_lfg_get(&prng) % 101 - 50;
-        v[0]    = av_lfg_get(&prng) % 101 - 50;
+        int v2  = (int)(av_lfg_get(&prng) % 101) - 50;
+        v[0]    = (int)(av_lfg_get(&prng) % 101) - 50;
         for(j=1; j<8; j++){
             if(j<=pos) v[j]= v[0];
             else       v[j]= v2;
-- 
2.52.0


From 926f148251de2a6134c05d1335825e369aebab1c Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Kacper=20Michaj=C5=82ow?= <[email protected]>
Date: Tue, 22 Sep 2026 18:34:17 +0200
Subject: [PATCH 04/11] avutil/tests/error: print only the FFmpeg-defined codes
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

The errno descriptions come from the C library where strerror_r() is
available and from the built-in table elsewhere, so the output differed
between platforms and could not be compared against a reference. Look
the errno codes up without printing them and fail when any code is not
found.

Signed-off-by: Kacper Michajłow <[email protected]>
---
 libavutil/tests/error.c | 44 +++++++++++++++++++++++++++++------------
 1 file changed, 31 insertions(+), 13 deletions(-)

diff --git a/libavutil/tests/error.c b/libavutil/tests/error.c
index 774c71fcb9..b0cf489df2 100644
--- a/libavutil/tests/error.c
+++ b/libavutil/tests/error.c
@@ -16,29 +16,47 @@
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
  */
 
+#include <stdio.h>
+
 #include "libavutil/error.c"
 
-static const char *const tag_list[] = {
-#define ERROR_TAG(CODE, DESC) #CODE,
-#define ERROR_TAG2(CODE, CODE2, DESC) #CODE,
+/* errno descriptions depend on the C library, so those are only looked up */
+static const struct {
+    int num;
+    const char *tag;
+} ffmpeg_codes[] = {
+#define ERROR_TAG(CODE, DESC)         { AVERROR_ ## CODE, #CODE },
+#define ERROR_TAG2(CODE, CODE2, DESC) { AVERROR_ ## CODE, #CODE },
     AVERROR_LIST(ERROR_TAG, ERROR_TAG2)
-#if !HAVE_STRERROR_R
-    STRERROR_LIST(ERROR_TAG)
-#endif
+};
+
+static const int errno_codes[] = {
+#define ERRNO_CODE(CODE, DESC) AVERROR(CODE),
+    STRERROR_LIST(ERRNO_CODE)
 };
 
 int main(void)
 {
-    int i;
+    char buf[AV_ERROR_MAX_STRING_SIZE];
+    int ret = 0;
 
-    for (i = 0; i < FF_ARRAY_ELEMS(error_entries); i++) {
-        const struct ErrorEntry *entry = &error_entries[i];
-        printf("%d: %s [%s]\n", entry->num, av_err2str(entry->num), 
tag_list[i]);
+    for (size_t i = 0; i < FF_ARRAY_ELEMS(ffmpeg_codes); i++) {
+        int num = ffmpeg_codes[i].num;
+
+        if (av_strerror(num, buf, sizeof(buf)) < 0) {
+            printf("%d: lookup failed [%s]\n", num, ffmpeg_codes[i].tag);
+            ret = 1;
+            continue;
+        }
+        printf("%d: %s [%s]\n", num, buf, ffmpeg_codes[i].tag);
     }
 
-    for (i = 0; i < 256; i++) {
-        printf("%d: %s\n", -i, av_err2str(-i));
+    for (size_t i = 0; i < FF_ARRAY_ELEMS(errno_codes); i++) {
+        if (av_strerror(errno_codes[i], buf, sizeof(buf)) < 0) {
+            printf("errno %d: lookup failed\n", AVUNERROR(errno_codes[i]));
+            ret = 1;
+        }
     }
 
-    return 0;
+    return ret;
 }
-- 
2.52.0


From 6e13078cdf3e8b9e6528264671cbde1291770779 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Kacper=20Michaj=C5=82ow?= <[email protected]>
Date: Tue, 22 Sep 2026 18:34:18 +0200
Subject: [PATCH 05/11] avutil/tests/utf8: decode built-in sequences when no
 file is given
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

The test required an input file and FATE has no stable one to feed it.
Cover valid, overlong, surrogate, non-character, out-of-range,
truncated and stray-continuation cases from a built-in table instead.

Signed-off-by: Kacper Michajłow <[email protected]>
---
 libavutil/tests/utf8.c | 46 ++++++++++++++++++++++++++++++------------
 1 file changed, 33 insertions(+), 13 deletions(-)

diff --git a/libavutil/tests/utf8.c b/libavutil/tests/utf8.c
index 37a2802b5f..6046c8cc71 100644
--- a/libavutil/tests/utf8.c
+++ b/libavutil/tests/utf8.c
@@ -23,6 +23,23 @@
 #include "libavutil/avstring.h"
 #include "libavutil/file.h"
 
+static const uint8_t vectors[] =
+    "A\n"
+    "\xC3\xA9\n"                /* U+00E9 */
+    "\xE2\x82\xAC\n"            /* U+20AC */
+    "\xF0\x9F\x98\x80\n"        /* U+1F600 */
+    "\xF4\x8F\xBF\xBF\n"        /* U+10FFFF */
+    "\xF4\x90\x80\x80\n"        /* U+110000 */
+    "\xF8\x88\x80\x80\x80\n"    /* 5 byte form of U+200000 */
+    "\xC0\x80\n"                /* overlong NUL */
+    "\xE0\x80\x80\n"            /* overlong NUL */
+    "\xED\xA0\x80\n"            /* U+D800 surrogate */
+    "\xEF\xBF\xBF\n"            /* U+FFFF */
+    "\x80\n"                    /* stray continuation */
+    "\xFE\n"                    /* invalid lead byte */
+    "\xC3" "A\n"                /* missing continuation */
+    "\xE2\x82";                 /* truncated */
+
 static void print_sequence(const char *p, int l, int indent)
 {
     int i;
@@ -31,21 +48,10 @@ static void print_sequence(const char *p, int l, int indent)
     printf("%*s", indent-l*2, "");
 }
 
-int main(int argc, char **argv)
+static void decode(const uint8_t *p, const uint8_t *endp)
 {
-    int ret;
-    char *filename = argv[1];
-    uint8_t *file_buf;
-    size_t file_buf_size;
     uint32_t code;
-    const uint8_t *p, *endp;
 
-    ret = av_file_map(filename, &file_buf, &file_buf_size, 0, NULL);
-    if (ret < 0)
-        return 1;
-
-    p = file_buf;
-    endp = file_buf + file_buf_size;
     while (p < endp) {
         int l, r;
         const uint8_t *p0 = p;
@@ -65,7 +71,21 @@ int main(int argc, char **argv)
             printf("invalid sequence\n");
         }
     }
+}
+
+int main(int argc, char **argv)
+{
+    if (argc > 1) {
+        uint8_t *file_buf;
+        size_t file_buf_size;
+        int ret = av_file_map(argv[1], &file_buf, &file_buf_size, 0, NULL);
+        if (ret < 0)
+            return 1;
+        decode(file_buf, file_buf + file_buf_size);
+        av_file_unmap(file_buf, file_buf_size);
+    } else {
+        decode(vectors, vectors + sizeof(vectors) - 1);
+    }
 
-    av_file_unmap(file_buf, file_buf_size);
     return 0;
 }
-- 
2.52.0


From cdf8435080a1cea344f5c1157c7b1151fc93ee32 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Kacper=20Michaj=C5=82ow?= <[email protected]>
Date: Tue, 22 Sep 2026 18:34:18 +0200
Subject: [PATCH 06/11] tests/fate/libavutil: run the test programs that were
 only built
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

error, lls, log, pca, rational, softfloat and utf8 were compiled by
make testprogs but never executed.

Signed-off-by: Kacper Michajłow <[email protected]>
---
 tests/fate/libavutil.mak |  30 ++++
 tests/ref/fate/error     |  29 ++++
 tests/ref/fate/lls       | 300 +++++++++++++++++++++++++++++++++++++++
 tests/ref/fate/pca       |  17 +++
 tests/ref/fate/softfloat |  12 ++
 tests/ref/fate/utf8      |  31 ++++
 6 files changed, 419 insertions(+)
 create mode 100644 tests/ref/fate/error
 create mode 100644 tests/ref/fate/lls
 create mode 100644 tests/ref/fate/pca
 create mode 100644 tests/ref/fate/softfloat
 create mode 100644 tests/ref/fate/utf8

diff --git a/tests/fate/libavutil.mak b/tests/fate/libavutil.mak
index b0af093d25..d45c7f5d89 100644
--- a/tests/fate/libavutil.mak
+++ b/tests/fate/libavutil.mak
@@ -107,6 +107,10 @@ fate-encryption-info: 
libavutil/tests/encryption_info$(EXESUF)
 fate-encryption-info: CMD = run libavutil/tests/encryption_info$(EXESUF)
 fate-encryption-info: CMP = null
 
+FATE_LIBAVUTIL += fate-error
+fate-error: libavutil/tests/error$(EXESUF)
+fate-error: CMD = run libavutil/tests/error$(EXESUF)
+
 FATE_LIBAVUTIL += fate-eval
 fate-eval: libavutil/tests/eval$(EXESUF)
 fate-eval: CMD = run libavutil/tests/eval$(EXESUF)
@@ -148,6 +152,15 @@ FATE_LIBAVUTIL += fate-lfg
 fate-lfg: libavutil/tests/lfg$(EXESUF)
 fate-lfg: CMD = run libavutil/tests/lfg$(EXESUF)
 
+FATE_LIBAVUTIL += fate-lls
+fate-lls: libavutil/tests/lls$(EXESUF)
+fate-lls: CMD = run libavutil/tests/lls$(EXESUF)
+
+FATE_LIBAVUTIL += fate-log
+fate-log: libavutil/tests/log$(EXESUF)
+fate-log: CMD = run libavutil/tests/log$(EXESUF)
+fate-log: CMP = null
+
 FATE_LIBAVUTIL += fate-mastering_display_metadata
 fate-mastering_display_metadata: 
libavutil/tests/mastering_display_metadata$(EXESUF)
 fate-mastering_display_metadata: CMD = run 
libavutil/tests/mastering_display_metadata$(EXESUF)
@@ -168,6 +181,10 @@ FATE_LIBAVUTIL += fate-parseutils
 fate-parseutils: libavutil/tests/parseutils$(EXESUF)
 fate-parseutils: CMD = run libavutil/tests/parseutils$(EXESUF)
 
+FATE_LIBAVUTIL += fate-pca
+fate-pca: libavutil/tests/pca$(EXESUF)
+fate-pca: CMD = run libavutil/tests/pca$(EXESUF)
+
 FATE_LIBAVUTIL += fate-pixdesc
 fate-pixdesc: libavutil/tests/pixdesc$(EXESUF)
 fate-pixdesc: CMD = run libavutil/tests/pixdesc$(EXESUF)
@@ -188,6 +205,11 @@ FATE_LIBAVUTIL += fate-random_seed
 fate-random_seed: libavutil/tests/random_seed$(EXESUF)
 fate-random_seed: CMD = run libavutil/tests/random_seed$(EXESUF)
 
+FATE_LIBAVUTIL += fate-rational
+fate-rational: libavutil/tests/rational$(EXESUF)
+fate-rational: CMD = run libavutil/tests/rational$(EXESUF)
+fate-rational: CMP = null
+
 FATE_LIBAVUTIL += fate-rc4
 fate-rc4: libavutil/tests/rc4$(EXESUF)
 fate-rc4: CMD = run libavutil/tests/rc4$(EXESUF)
@@ -216,6 +238,10 @@ FATE_LIBAVUTIL += fate-side_data_array
 fate-side_data_array: libavutil/tests/side_data_array$(EXESUF)
 fate-side_data_array: CMD = run libavutil/tests/side_data_array$(EXESUF)
 
+FATE_LIBAVUTIL += fate-softfloat
+fate-softfloat: libavutil/tests/softfloat$(EXESUF)
+fate-softfloat: CMD = run libavutil/tests/softfloat$(EXESUF)
+
 FATE_LIBAVUTIL += fate-spherical
 fate-spherical: libavutil/tests/spherical$(EXESUF)
 fate-spherical: CMD = run libavutil/tests/spherical$(EXESUF)
@@ -250,6 +276,10 @@ FATE_LIBAVUTIL += fate-opt
 fate-opt: libavutil/tests/opt$(EXESUF)
 fate-opt: CMD = run libavutil/tests/opt$(EXESUF)
 
+FATE_LIBAVUTIL += fate-utf8
+fate-utf8: libavutil/tests/utf8$(EXESUF)
+fate-utf8: CMD = run libavutil/tests/utf8$(EXESUF)
+
 FATE_LIBAVUTIL += fate-uuid
 fate-uuid: libavutil/tests/uuid$(EXESUF)
 fate-uuid: CMD = run libavutil/tests/uuid$(EXESUF)
diff --git a/tests/ref/fate/error b/tests/ref/fate/error
new file mode 100644
index 0000000000..5774451bcc
--- /dev/null
+++ b/tests/ref/fate/error
@@ -0,0 +1,29 @@
+-1179861752: Bitstream filter not found [BSF_NOT_FOUND]
+-558323010: Internal bug, should not have happened [BUG]
+-541545794: Internal bug, should not have happened [BUG2]
+-1397118274: Buffer too small [BUFFER_TOO_SMALL]
+-1128613112: Decoder not found [DECODER_NOT_FOUND]
+-1296385272: Demuxer not found [DEMUXER_NOT_FOUND]
+-1129203192: Encoder not found [ENCODER_NOT_FOUND]
+-541478725: End of file [EOF]
+-1414092869: Immediate exit requested [EXIT]
+-542398533: Generic error in an external library [EXTERNAL]
+-1279870712: Filter not found [FILTER_NOT_FOUND]
+-1668179713: Input changed [INPUT_CHANGED]
+-1094995529: Invalid data found when processing input [INVALIDDATA]
+-1481985528: Muxer not found [MUXER_NOT_FOUND]
+-1414549496: Option not found [OPTION_NOT_FOUND]
+-1668179714: Output changed [OUTPUT_CHANGED]
+-1163346256: Not yet implemented in FFmpeg, patches welcome [PATCHWELCOME]
+-1330794744: Protocol not found [PROTOCOL_NOT_FOUND]
+-1381258232: Stream not found [STREAM_NOT_FOUND]
+-1313558101: Unknown error occurred [UNKNOWN]
+-733130664: Experimental feature [EXPERIMENTAL]
+-1668179713: Input changed [INPUT_AND_OUTPUT_CHANGED]
+-808465656: Server returned 400 Bad Request [HTTP_BAD_REQUEST]
+-825242872: Server returned 401 Unauthorized (authorization failed) 
[HTTP_UNAUTHORIZED]
+-858797304: Server returned 403 Forbidden (access denied) [HTTP_FORBIDDEN]
+-875574520: Server returned 404 Not Found [HTTP_NOT_FOUND]
+-959591672: Server returned 429 Too Many Requests [HTTP_TOO_MANY_REQUESTS]
+-1482175736: Server returned 4XX Client Error, but not one of 40{0,1,3,4} 
[HTTP_OTHER_4XX]
+-1482175992: Server returned 5XX Server Error reply [HTTP_SERVER_ERROR]
diff --git a/tests/ref/fate/lls b/tests/ref/fate/lls
new file mode 100644
index 0000000000..8589ee4f31
--- /dev/null
+++ b/tests/ref/fate/lls
@@ -0,0 +1,300 @@
+real:-0.828987 order:0 pred:-0.828987 var:0.000000 coeffs:2.166433  0.000000  
0.000000
+real:-0.828987 order:1 pred:-0.828987 var:0.000000 coeffs:2.166433  0.000000  
0.000000
+real:-0.828987 order:2 pred:-0.828987 var:0.000000 coeffs:2.166433  0.000000  
0.000000
+real:-0.326534 order:0 pred:-0.588792 var:0.272632 coeffs:1.427836 -0.385559 
-0.000000
+real:-0.326534 order:1 pred:-0.326534 var:0.000000 coeffs:3.274787 -1.436430  
0.000000
+real:-0.326534 order:2 pred:-0.326534 var:nan coeffs:3.274787 -1.436430 
-0.000000
+real:-0.496309 order:0 pred:-0.560478 var:0.227332 coeffs:1.343229 -0.128675 
-0.372131
+real:-0.496309 order:1 pred:-0.649268 var:0.214850 coeffs:1.541607 -0.245332  
0.000000
+real:-0.496309 order:2 pred:-0.496309 var:0.000000 coeffs:1.629421  0.626407 
-0.697480
+real: 0.386201 order:0 pred: 0.644642 var:0.263532 coeffs:1.005471 -0.232581 
-0.189366
+real: 0.386201 order:1 pred: 0.590550 var:0.236486 coeffs:1.416443 -0.420822  
0.000000
+real: 0.386201 order:2 pred: 0.653364 var:0.216704 coeffs:1.417320 -0.084129 
-0.312548
+real:-0.193176 order:0 pred:-0.419259 var:0.261372 coeffs:0.886941 -0.255165 
-0.256307
+real:-0.193176 order:1 pred:-0.397912 var:0.235146 coeffs:1.347037 -0.459663  
0.000000
+real:-0.193176 order:2 pred:-0.320068 var:0.205317 coeffs:1.374542 -0.016455 
-0.397716
+real:-0.819346 order:0 pred:-0.817295 var:0.238602 coeffs:0.888617 -0.244921 
-0.265042
+real:-0.819346 order:1 pred:-0.767249 var:0.216640 coeffs:1.354697 -0.424767  
0.000000
+real:-0.819346 order:2 pred:-0.835666 var:0.187683 coeffs:1.371228 -0.042115 
-0.384499
+real:-0.697642 order:0 pred:-0.475989 var:0.238158 coeffs:0.945246 -0.128647 
-0.377407
+real:-0.697642 order:1 pred:-0.426975 var:0.233141 coeffs:1.181630 -0.204018  
0.000000
+real:-0.697642 order:2 pred:-0.571741 var:0.184410 coeffs:1.295268  0.165694 
-0.490134
+real: 0.671639 order:0 pred: 0.851210 var:0.235395 coeffs:0.865894 -0.172820 
-0.414246
+real: 0.671639 order:1 pred: 0.819457 var:0.227327 coeffs:1.189691 -0.267353  
0.000000
+real: 0.671639 order:2 pred: 0.719424 var:0.173861 coeffs:1.303358  0.163061 
-0.513787
+real: 0.505220 order:0 pred: 0.769476 var:0.243622 coeffs:0.784684 -0.091304 
-0.508743
+real: 0.505220 order:1 pred: 0.789639 var:0.241713 coeffs:0.944040 -0.136693  
0.000000
+real: 0.505220 order:2 pred: 0.630345 var:0.172243 coeffs:1.211361  0.281405 
-0.586439
+real: 0.646869 order:0 pred: 0.405190 var:0.244144 coeffs:0.813667 -0.048322 
-0.570249
+real: 0.646869 order:1 pred: 0.397323 var:0.243665 coeffs:0.897756 -0.071321  
0.000000
+real: 0.646869 order:2 pred: 0.612396 var:0.163872 coeffs:1.213071  0.303110 
-0.604217
+real: 0.838898 order:0 pred: 0.953519 var:0.236189 coeffs:0.781903  0.045694 
-0.541937
+real: 0.838898 order:1 pred: 0.928701 var:0.235787 coeffs:0.726915  0.052472  
0.000000
+real: 0.838898 order:2 pred: 0.986385 var:0.169988 coeffs:0.913062  0.483347 
-0.566983
+real: 0.427629 order:0 pred: 0.186681 var:0.236686 coeffs:0.791554  0.057075 
-0.413636
+real: 0.427629 order:1 pred: 0.189364 var:0.236112 coeffs:0.722840  0.065468  
0.000000
+real: 0.427629 order:2 pred: 0.036153 var:0.203693 coeffs:0.852069  0.379016 
-0.401598
+real: 0.630997 order:0 pred: 0.518520 var:0.229679 coeffs:0.803763  0.069837 
-0.427707
+real: 0.630997 order:1 pred: 0.526137 var:0.228860 coeffs:0.719394  0.079595  
0.000000
+real: 0.630997 order:2 pred: 0.639161 var:0.195717 coeffs:0.851578  0.376072 
-0.399236
+real: 0.230755 order:0 pred: 0.412679 var:0.226826 coeffs:0.788797  0.154229 
-0.437540
+real: 0.230755 order:1 pred: 0.336289 var:0.223049 coeffs:0.634356  0.151631  
0.000000
+real: 0.230755 order:2 pred: 0.301630 var:0.189938 coeffs:0.796911  0.429929 
-0.406615
+real: 0.397893 order:0 pred: 0.364459 var:0.219310 coeffs:0.791119  0.146737 
-0.436564
+real: 0.397893 order:1 pred: 0.341176 var:0.216013 coeffs:0.647719  0.142379  
0.000000
+real: 0.397893 order:2 pred: 0.458829 var:0.184271 coeffs:0.775826  0.428350 
-0.389785
+real:-0.524796 order:0 pred:-0.379840 var:0.215516 coeffs:0.801159  0.103667 
-0.435614
+real:-0.524796 order:1 pred:-0.353471 var:0.213952 coeffs:0.705119  0.097169  
0.000000
+real:-0.524796 order:2 pred:-0.351303 var:0.184162 coeffs:0.833672  0.381942 
-0.388931
+real:-0.003007 order:0 pred: 0.252175 var:0.218176 coeffs:0.789632  0.143953 
-0.369571
+real:-0.003007 order:1 pred: 0.229010 var:0.215364 coeffs:0.659080  0.133146  
0.000000
+real:-0.003007 order:2 pred: 0.312179 var:0.195825 coeffs:0.748724  0.381181 
-0.321143
+real:-0.062503 order:0 pred: 0.277550 var:0.226928 coeffs:0.772600  0.011420 
-0.329814
+real:-0.062503 order:1 pred: 0.281606 var:0.226912 coeffs:0.762728  0.009861  
0.000000
+real:-0.062503 order:2 pred: 0.312656 var:0.213180 coeffs:0.851665  0.218941 
-0.285109
+real:-0.928055 order:0 pred:-0.372199 var:0.255970 coeffs:0.807683 -0.148801 
-0.299786
+real:-0.928055 order:1 pred:-0.413756 var:0.253684 coeffs:0.928421 -0.123222  
0.000000
+real:-0.928055 order:2 pred:-0.398366 var:0.244183 coeffs:1.014101  0.062559 
-0.258769
+real:-0.970030 order:0 pred:-1.088345 var:0.251243 coeffs:0.785875 -0.136316 
-0.220239
+real:-0.970030 order:1 pred:-1.099254 var:0.249388 coeffs:0.894027 -0.112429  
0.000000
+real:-0.970030 order:2 pred:-1.174973 var:0.244477 coeffs:0.931920  0.019760 
-0.175312
+real:-0.213946 order:0 pred: 0.022550 var:0.250561 coeffs:0.785155 -0.079985 
-0.119158
+real:-0.213946 order:1 pred: 0.040433 var:0.249953 coeffs:0.846953 -0.064299  
0.000000
+real:-0.213946 order:2 pred: 0.079653 var:0.248596 coeffs:0.858993  0.010439 
-0.089278
+real:-0.901990 order:0 pred:-0.814524 var:0.245589 coeffs:0.794660 -0.075448 
-0.089286
+real:-0.901990 order:1 pred:-0.811075 var:0.245061 coeffs:0.853260 -0.060581  
0.000000
+real:-0.901990 order:2 pred:-0.788538 var:0.244321 coeffs:0.863519 -0.005681 
-0.064479
+real:-0.052210 order:0 pred:-0.170151 var:0.241452 coeffs:0.792244 -0.097536 
-0.113901
+real:-0.052210 order:1 pred:-0.150713 var:0.240594 coeffs:0.866871 -0.076738  
0.000000
+real:-0.052210 order:2 pred:-0.119568 var:0.239418 coeffs:0.875132 -0.004390 
-0.078972
+real: 0.639718 order:0 pred: 0.604742 var:0.236482 coeffs:0.794771 -0.103875 
-0.112120
+real: 0.639718 order:1 pred: 0.636286 var:0.235529 coeffs:0.868004 -0.077649  
0.000000
+real: 0.639718 order:2 pred: 0.658164 var:0.234414 coeffs:0.868728 -0.002230 
-0.075989
+real: 0.833118 order:0 pred: 0.313633 var:0.254216 coeffs:0.812817 -0.113999 
-0.263191
+real: 0.833118 order:1 pred: 0.315829 var:0.253192 coeffs:0.893095 -0.085201  
0.000000
+real: 0.833118 order:2 pred: 0.394239 var:0.247660 coeffs:0.890912  0.084830 
-0.170162
+real:-0.353604 order:0 pred:-0.176128 var:0.251708 coeffs:0.816219 -0.118130 
-0.287631
+real:-0.353604 order:1 pred:-0.178888 var:0.250639 coeffs:0.899331 -0.088264  
0.000000
+real:-0.353604 order:2 pred:-0.224391 var:0.244209 coeffs:0.895351  0.096002 
-0.183610
+real: 0.814291 order:0 pred: 0.574432 var:0.251458 coeffs:0.830889 -0.119747 
-0.249363
+real: 0.814291 order:1 pred: 0.575208 var:0.250400 coeffs:0.915090 -0.089470  
0.000000
+real: 0.814291 order:2 pred: 0.539932 var:0.245758 coeffs:0.914001  0.068427 
-0.157513
+real: 0.682850 order:0 pred: 0.475706 var:0.250094 coeffs:0.840836 -0.149758 
-0.204431
+real: 0.682850 order:1 pred: 0.497774 var:0.248487 coeffs:0.943898 -0.110638  
0.000000
+real: 0.682850 order:2 pred: 0.456273 var:0.245466 coeffs:0.949485  0.011229 
-0.126305
+real:-0.926620 order:0 pred:-0.643276 var:0.251569 coeffs:0.858383 -0.143622 
-0.180347
+real:-0.926620 order:1 pred:-0.640320 var:0.250151 coeffs:0.957383 -0.106082  
0.000000
+real:-0.926620 order:2 pred:-0.626222 var:0.247899 coeffs:0.962960  0.001308 
-0.111068
+real:-0.258917 order:0 pred:-0.309232 var:0.247513 coeffs:0.856949 -0.146436 
-0.173184
+real:-0.258917 order:1 pred:-0.300356 var:0.246065 coeffs:0.957955 -0.107959  
0.000000
+real:-0.258917 order:2 pred:-0.323259 var:0.244025 coeffs:0.963578 -0.006792 
-0.105706
+real: 0.477848 order:0 pred: 0.301952 var:0.245549 coeffs:0.861766 -0.108873 
-0.171989
+real: 0.477848 order:1 pred: 0.280671 var:0.244769 coeffs:0.935983 -0.078703  
0.000000
+real: 0.477848 order:2 pred: 0.279682 var:0.242812 coeffs:0.941458  0.021912 
-0.104975
+real:-0.510115 order:0 pred:-0.398674 var:0.242496 coeffs:0.865740 -0.130960 
-0.184497
+real:-0.510115 order:1 pred:-0.427306 var:0.241389 coeffs:0.951796 -0.092341  
0.000000
+real:-0.510115 order:2 pred:-0.459140 var:0.239175 coeffs:0.951495  0.019104 
-0.110804
+real: 0.748755 order:0 pred: 0.414613 var:0.245893 coeffs:0.877762 -0.058292 
-0.134888
+real: 0.748755 order:1 pred: 0.402635 var:0.245683 coeffs:0.915667 -0.040210  
0.000000
+real: 0.748755 order:2 pred: 0.385055 var:0.244559 coeffs:0.913614  0.043177 
-0.080276
+real: 0.853146 order:0 pred: 0.344285 var:0.257654 coeffs:0.892465 -0.153664 
-0.206363
+real: 0.853146 order:1 pred: 0.373079 var:0.256303 coeffs:0.989763 -0.104099  
0.000000
+real: 0.853146 order:2 pred: 0.402999 var:0.253848 coeffs:0.982039  0.026043 
-0.121452
+real: 0.558712 order:0 pred: 0.835073 var:0.258494 coeffs:0.872881 -0.187788 
-0.189840
+real: 0.558712 order:1 pred: 0.812607 var:0.256538 coeffs:0.992466 -0.126241  
0.000000
+real: 0.558712 order:2 pred: 0.823735 var:0.254523 coeffs:0.985492 -0.007712 
-0.111519
+real: 0.495069 order:0 pred: 0.745996 var:0.258464 coeffs:0.857741 -0.208964 
-0.144121
+real: 0.495069 order:1 pred: 0.728704 var:0.256107 coeffs:0.991375 -0.139969  
0.000000
+real: 0.495069 order:2 pred: 0.753553 var:0.254978 coeffs:0.986048 -0.052876 
-0.083317
+real:-0.847274 order:0 pred:-0.626967 var:0.257595 coeffs:0.868227 -0.252837 
-0.123367
+real:-0.847274 order:1 pred:-0.681237 var:0.254219 coeffs:1.023435 -0.165272  
0.000000
+real:-0.847274 order:2 pred:-0.667688 var:0.253409 coeffs:1.021521 -0.093274 
-0.070851
+real: 0.732250 order:0 pred: 0.723075 var:0.254187 coeffs:0.868714 -0.247558 
-0.128723
+real: 0.732250 order:1 pred: 0.781849 var:0.250995 coeffs:1.013024 -0.156987  
0.000000
+real: 0.732250 order:2 pred: 0.767256 var:0.250125 coeffs:1.014105 -0.084839 
-0.073398
+real: 0.854238 order:0 pred: 0.892120 var:0.250985 coeffs:0.866333 -0.249874 
-0.129765
+real: 0.854238 order:1 pred: 0.835958 var:0.247776 coeffs:1.011551 -0.154135  
0.000000
+real: 0.854238 order:2 pred: 0.863721 var:0.246903 coeffs:1.014849 -0.087632 
-0.072061
+real: 0.128783 order:0 pred: 0.177708 var:0.247949 coeffs:0.865758 -0.253738 
-0.131498
+real: 0.128783 order:1 pred: 0.108332 var:0.244682 coeffs:1.008405 -0.150540  
0.000000
+real: 0.128783 order:2 pred: 0.129368 var:0.243797 coeffs:1.014937 -0.087788 
-0.072004
+real:-0.687176 order:0 pred:-0.724514 var:0.244979 coeffs:0.863967 -0.256417 
-0.131282
+real:-0.687176 order:1 pred:-0.696076 var:0.241684 coeffs:1.008559 -0.151153  
0.000000
+real:-0.687176 order:2 pred:-0.675786 var:0.240813 coeffs:1.014646 -0.087900 
-0.070975
+real:-0.739125 order:0 pred:-0.939293 var:0.244138 coeffs:0.851834 -0.270116 
-0.159493
+real:-0.739125 order:1 pred:-0.921187 var:0.240554 coeffs:1.004883 -0.158846  
0.000000
+real:-0.739125 order:2 pred:-0.896778 var:0.239292 coeffs:1.012677 -0.081940 
-0.085137
+real: 0.507156 order:0 pred: 0.132038 var:0.247980 coeffs:0.854820 -0.324186 
-0.129772
+real: 0.507156 order:1 pred: 0.181435 var:0.243002 coeffs:1.035964 -0.188414  
0.000000
+real: 0.507156 order:2 pred: 0.170125 var:0.242194 coeffs:1.043360 -0.127110 
-0.069002
+real:-0.471621 order:0 pred:-0.781593 var:0.249754 coeffs:0.839977 -0.278769 
-0.135313
+real:-0.471621 order:1 pred:-0.818174 var:0.246193 coeffs:0.992584 -0.160555  
0.000000
+real:-0.471621 order:2 pred:-0.816134 var:0.245347 coeffs:1.000551 -0.096804 
-0.071940
+real:-0.400683 order:0 pred:-0.398789 var:0.246964 coeffs:0.840021 -0.276427 
-0.130292
+real:-0.400683 order:1 pred:-0.365041 var:0.243502 coeffs:0.990991 -0.158001  
0.000000
+real:-0.400683 order:2 pred:-0.350326 var:0.242726 coeffs:0.997954 -0.095965 
-0.068816
+real:-0.771989 order:0 pred:-0.719337 var:0.244393 coeffs:0.842212 -0.280679 
-0.121663
+real:-0.771989 order:1 pred:-0.750119 var:0.240863 coeffs:0.993266 -0.159430  
0.000000
+real:-0.771989 order:2 pred:-0.722825 var:0.240194 coeffs:1.002433 -0.104835 
-0.062539
+real:-0.239982 order:0 pred:-0.517646 var:0.245208 coeffs:0.834104 -0.340736 
-0.155665
+real:-0.239982 order:1 pred:-0.434962 var:0.240118 coeffs:1.014311 -0.187652  
0.000000
+real:-0.239982 order:2 pred:-0.408481 var:0.239042 coeffs:1.022997 -0.115069 
-0.078754
+real:-0.673879 order:0 pred:-0.699182 var:0.242669 coeffs:0.833122 -0.338137 
-0.162693
+real:-0.673879 order:1 pred:-0.722229 var:0.237710 coeffs:1.010632 -0.185773  
0.000000
+real:-0.673879 order:2 pred:-0.687012 var:0.236547 coeffs:1.022166 -0.113149 
-0.080284
+real: 0.303104 order:0 pred: 0.478861 var:0.241508 coeffs:0.828576 -0.352732 
-0.157339
+real: 0.303104 order:1 pred: 0.447274 var:0.236193 coeffs:1.013809 -0.193002  
0.000000
+real: 0.303104 order:2 pred: 0.452872 var:0.235121 coeffs:1.025080 -0.123093 
-0.077591
+real:-0.722316 order:0 pred:-0.498196 var:0.241205 coeffs:0.834477 -0.395507 
-0.163294
+real:-0.722316 order:1 pred:-0.589230 var:0.234631 coeffs:1.034111 -0.210503  
0.000000
+real:-0.722316 order:2 pred:-0.596214 var:0.233491 coeffs:1.044732 -0.137102 
-0.080449
+real: 0.849617 order:0 pred: 0.546192 var:0.242647 coeffs:0.843012 -0.367722 
-0.217502
+real: 0.849617 order:1 pred: 0.514865 var:0.237120 coeffs:1.028816 -0.194991  
0.000000
+real: 0.849617 order:2 pred: 0.550645 var:0.235156 coeffs:1.043331 -0.100247 
-0.105657
+real: 0.428214 order:0 pred: 0.341605 var:0.240604 coeffs:0.844506 -0.369417 
-0.197099
+real: 0.428214 order:1 pred: 0.349107 var:0.235087 coeffs:1.030998 -0.195849  
0.000000
+real: 0.428214 order:2 pred: 0.309629 var:0.233493 coeffs:1.044971 -0.112173 
-0.093792
+real:-0.888929 order:0 pred:-0.396992 var:0.247802 coeffs:0.854188 -0.265236 
-0.253082
+real:-0.888929 order:1 pred:-0.345170 var:0.245109 coeffs:0.986502 -0.137882  
0.000000
+real:-0.888929 order:2 pred:-0.370454 var:0.242632 coeffs:1.006419 -0.033699 
-0.119799
+real: 0.479080 order:0 pred: 0.226084 var:0.247906 coeffs:0.856988 -0.220977 
-0.292152
+real: 0.479080 order:1 pred: 0.190553 var:0.246076 coeffs:0.966178 -0.113375  
0.000000
+real: 0.479080 order:2 pred: 0.231507 var:0.242843 coeffs:0.991821  0.002189 
-0.136887
+real:-0.999723 order:0 pred:-1.166530 var:0.246751 coeffs:0.847381 -0.189276 
-0.275134
+real:-0.999723 order:1 pred:-1.196660 var:0.245428 coeffs:0.937883 -0.095773  
0.000000
+real:-0.999723 order:2 pred:-1.216971 var:0.242608 coeffs:0.959041  0.014545 
-0.128523
+real:-0.449408 order:0 pred:-0.751376 var:0.247948 coeffs:0.836871 -0.240450 
-0.303586
+real:-0.449408 order:1 pred:-0.709566 var:0.245857 coeffs:0.951490 -0.119755  
0.000000
+real:-0.449408 order:2 pred:-0.676459 var:0.242487 coeffs:0.972956  0.004251 
-0.140913
+real:-0.855769 order:0 pred:-0.695050 var:0.246707 coeffs:0.841859 -0.222264 
-0.298336
+real:-0.855769 order:1 pred:-0.672279 var:0.244944 coeffs:0.947944 -0.110100  
0.000000
+real:-0.855769 order:2 pred:-0.664226 var:0.241736 coeffs:0.968876  0.012139 
-0.138424
+real: 0.510468 order:0 pred: 0.220157 var:0.247531 coeffs:0.844632 -0.162354 
-0.329557
+real: 0.510468 order:1 pred: 0.189040 var:0.246611 coeffs:0.920980 -0.078929  
0.000000
+real: 0.510468 order:2 pred: 0.221261 var:0.242785 coeffs:0.946689  0.052304 
-0.152147
+real:-0.037038 order:0 pred:-0.257147 var:0.247097 coeffs:0.842175 -0.169037 
-0.290205
+real:-0.037038 order:1 pred:-0.251974 var:0.246115 coeffs:0.921686 -0.082139  
0.000000
+real:-0.037038 order:2 pred:-0.298996 var:0.243198 coeffs:0.944179  0.031188 
-0.132202
+real:-0.685151 order:0 pred:-0.965214 var:0.247813 coeffs:0.830313 -0.129347 
-0.273679
+real:-0.685151 order:1 pred:-0.982022 var:0.247249 coeffs:0.889901 -0.062293  
0.000000
+real:-0.685151 order:2 pred:-0.995939 var:0.244712 coeffs:0.909594  0.045362 
-0.124501
+real:-0.760963 order:0 pred:-0.870811 var:0.246191 coeffs:0.826292 -0.150866 
-0.265666
+real:-0.760963 order:1 pred:-0.838135 var:0.245432 coeffs:0.895276 -0.070865  
0.000000
+real:-0.760963 order:2 pred:-0.860156 var:0.243063 coeffs:0.915855  0.030800 
-0.120402
+real: 0.219888 order:0 pred: 0.356800 var:0.244819 coeffs:0.824311 -0.130747 
-0.287719
+real: 0.219888 order:1 pred: 0.374558 var:0.244256 coeffs:0.883281 -0.060842  
0.000000
+real: 0.219888 order:2 pred: 0.328046 var:0.241507 coeffs:0.908874  0.044763 
-0.128637
+real: 0.693888 order:0 pred: 0.302142 var:0.247854 coeffs:0.829055 -0.079935 
-0.267078
+real: 0.693888 order:1 pred: 0.292034 var:0.247650 coeffs:0.864939 -0.036897  
0.000000
+real: 0.693888 order:2 pred: 0.278829 var:0.245353 coeffs:0.888064  0.061796 
-0.119260
+real:-0.238932 order:0 pred:-0.433853 var:0.247125 coeffs:0.825667 -0.089630 
-0.292470
+real:-0.238932 order:1 pred:-0.429390 var:0.246871 coeffs:0.865930 -0.041320  
0.000000
+real:-0.238932 order:2 pred:-0.386389 var:0.244149 coeffs:0.890751  0.066567 
-0.129162
+real: 0.559537 order:0 pred: 0.755299 var:0.246450 coeffs:0.819753 -0.102088 
-0.297625
+real: 0.559537 order:1 pred: 0.748886 var:0.246124 coeffs:0.865714 -0.046968  
0.000000
+real: 0.559537 order:2 pred: 0.740868 var:0.243340 coeffs:0.890972  0.063019 
-0.131390
+real: 0.267426 order:0 pred: 0.190705 var:0.244758 coeffs:0.820322 -0.091891 
-0.291937
+real: 0.267426 order:1 pred: 0.179436 var:0.244497 coeffs:0.861463 -0.041957  
0.000000
+real: 0.267426 order:2 pred: 0.162537 var:0.241841 coeffs:0.885380  0.066706 
-0.128659
+real:-0.912624 order:0 pred:-0.873112 var:0.242974 coeffs:0.821659 -0.096275 
-0.292511
+real:-0.912624 order:1 pred:-0.885196 var:0.242689 coeffs:0.864001 -0.043599  
0.000000
+real:-0.912624 order:2 pred:-0.891796 var:0.240044 coeffs:0.887347  0.065644 
-0.128877
+real: 0.789354 order:0 pred: 0.664720 var:0.241664 coeffs:0.824747 -0.102905 
-0.268907
+real: 0.789354 order:1 pred: 0.670199 var:0.241341 coeffs:0.869803 -0.046534  
0.000000
+real: 0.789354 order:2 pred: 0.626786 var:0.239128 coeffs:0.893091  0.051476 
-0.116888
+real: 0.940074 order:0 pred: 0.417138 var:0.248089 coeffs:0.832641 -0.137834 
-0.199593
+real: 0.940074 order:1 pred: 0.426336 var:0.247533 coeffs:0.892716 -0.062188  
0.000000
+real: 0.940074 order:2 pred: 0.400601 var:0.246364 coeffs:0.911003  0.009160 
-0.086025
+real:-0.135795 order:0 pred:-0.193873 var:0.246408 coeffs:0.832236 -0.132965 
-0.205141
+real:-0.135795 order:1 pred:-0.204072 var:0.245895 coeffs:0.889947 -0.059814  
0.000000
+real:-0.135795 order:2 pred:-0.184905 var:0.244670 coeffs:0.909437  0.012527 
-0.088027
+real:-0.380152 order:0 pred:-0.575615 var:0.245780 coeffs:0.828180 -0.170820 
-0.219703
+real:-0.380152 order:1 pred:-0.540524 var:0.244943 coeffs:0.901445 -0.075181  
0.000000
+real:-0.380152 order:2 pred:-0.520535 var:0.243551 coeffs:0.920794  0.003871 
-0.093861
+real: 0.767799 order:0 pred: 0.515128 var:0.245897 coeffs:0.832780 -0.219118 
-0.260502
+real: 0.767799 order:1 pred: 0.559634 var:0.244538 coeffs:0.923968 -0.094404  
0.000000
+real: 0.767799 order:2 pred: 0.614095 var:0.242603 coeffs:0.940482  0.002169 
-0.108694
+real:-0.449221 order:0 pred:-0.127159 var:0.247101 coeffs:0.834209 -0.240424 
-0.279751
+real:-0.449221 order:1 pred:-0.143428 var:0.245494 coeffs:0.933963 -0.103346  
0.000000
+real:-0.449221 order:2 pred:-0.161440 var:0.243301 coeffs:0.951071  0.000674 
-0.116482
+real: 0.834714 order:0 pred: 0.563835 var:0.247464 coeffs:0.839501 -0.188273 
-0.330164
+real: 0.834714 order:1 pred: 0.530670 var:0.246494 coeffs:0.917027 -0.079647  
0.000000
+real: 0.834714 order:2 pred: 0.587549 var:0.243488 coeffs:0.940071  0.036764 
-0.135322
+real:-0.645754 order:0 pred:-0.848549 var:0.246955 coeffs:0.833574 -0.223517 
-0.334721
+real:-0.645754 order:1 pred:-0.807251 var:0.245602 coeffs:0.925188 -0.092880  
0.000000
+real:-0.645754 order:2 pred:-0.798148 var:0.242542 coeffs:0.948080  0.025837 
-0.137136
+real:-0.709879 order:0 pred:-0.512407 var:0.246379 coeffs:0.836945 -0.231150 
-0.301903
+real:-0.709879 order:1 pred:-0.521450 var:0.244948 coeffs:0.931459 -0.095977  
0.000000
+real:-0.709879 order:2 pred:-0.475690 var:0.242488 coeffs:0.953389  0.009096 
-0.122244
+real:-0.039044 order:0 pred: 0.341407 var:0.248602 coeffs:0.832641 -0.251358 
-0.331404
+real:-0.039044 order:1 pred: 0.327897 var:0.246946 coeffs:0.935421 -0.104217  
0.000000
+real:-0.039044 order:2 pred: 0.300522 var:0.244041 coeffs:0.959116  0.011341 
-0.133727
+real:-0.805253 order:0 pred:-0.460031 var:0.250102 coeffs:0.837847 -0.201973 
-0.378703
+real:-0.805253 order:1 pred:-0.432726 var:0.249054 coeffs:0.920081 -0.082965  
0.000000
+real:-0.805253 order:2 pred:-0.482453 var:0.245335 coeffs:0.948964  0.045074 
-0.151454
+real:-0.725547 order:0 pred:-0.681110 var:0.248565 coeffs:0.838830 -0.195719 
-0.370417
+real:-0.725547 order:1 pred:-0.659495 var:0.247588 coeffs:0.918499 -0.079896  
0.000000
+real:-0.725547 order:2 pred:-0.624121 var:0.244055 coeffs:0.945770  0.046395 
-0.147442
+real:-0.235186 order:0 pred:-0.528829 var:0.249202 coeffs:0.833846 -0.196426 
-0.410701
+real:-0.235186 order:1 pred:-0.528361 var:0.248233 coeffs:0.913811 -0.080184  
0.000000
+real:-0.235186 order:2 pred:-0.466636 var:0.243949 coeffs:0.944688  0.058295 
-0.161600
+real: 0.054254 order:0 pred: 0.406221 var:0.250747 coeffs:0.829282 -0.202759 
-0.387362
+real: 0.054254 order:1 pred: 0.402578 var:0.249733 coeffs:0.911859 -0.082756  
0.000000
+real: 0.054254 order:2 pred: 0.427420 var:0.245996 coeffs:0.940781  0.047400 
-0.152101
+real: 0.323351 order:0 pred: 0.639852 var:0.251691 coeffs:0.822807 -0.206646 
-0.323421
+real: 0.323351 order:1 pred: 0.637344 var:0.250655 coeffs:0.907012 -0.084336  
0.000000
+real: 0.323351 order:2 pred: 0.695630 var:0.248097 coeffs:0.929859  0.022234 
-0.124881
+real: 0.082771 order:0 pred:-0.109412 var:0.251059 coeffs:0.822145 -0.208820 
-0.346602
+real: 0.082771 order:1 pred:-0.107035 var:0.250010 coeffs:0.907239 -0.085218  
0.000000
+real: 0.082771 order:2 pred:-0.059040 var:0.247099 coeffs:0.931429  0.028112 
-0.132542
+real: 0.000429 order:0 pred:-0.053163 var:0.249628 coeffs:0.822055 -0.210534 
-0.349693
+real: 0.000429 order:1 pred:-0.045949 var:0.248569 coeffs:0.907809 -0.085867  
0.000000
+real: 0.000429 order:2 pred:-0.000767 var:0.245623 coeffs:0.931455  0.028146 
-0.132601
+real:-0.355315 order:0 pred:-0.321379 var:0.248183 coeffs:0.822398 -0.211249 
-0.343417
+real:-0.355315 order:1 pred:-0.326142 var:0.247123 coeffs:0.908373 -0.086137  
0.000000
+real:-0.355315 order:2 pred:-0.283881 var:0.244300 coeffs:0.932235  0.024586 
-0.129227
+real: 0.466345 order:0 pred: 0.061585 var:0.250567 coeffs:0.823179 -0.198793 
-0.362906
+real: 0.466345 order:1 pred: 0.055516 var:0.249649 coeffs:0.904058 -0.081020  
0.000000
+real: 0.466345 order:2 pred: 0.073068 var:0.246562 coeffs:0.929429  0.035630 
-0.136401
+real:-0.352165 order:0 pred:-0.209196 var:0.249595 coeffs:0.824114 -0.178211 
-0.344549
+real:-0.352165 order:1 pred:-0.185739 var:0.248862 coeffs:0.896142 -0.071999  
0.000000
+real:-0.352165 order:2 pred:-0.152056 var:0.246106 coeffs:0.918509  0.040036 
-0.128869
+real: 0.997183 order:0 pred: 1.107374 var:0.248463 coeffs:0.820286 -0.181364 
-0.330040
+real: 0.997183 order:1 pred: 1.102302 var:0.247710 coeffs:0.893734 -0.073242  
0.000000
+real: 0.997183 order:2 pred: 1.139052 var:0.245199 coeffs:0.914178  0.032940 
-0.122638
+real: 0.338352 order:0 pred: 0.157454 var:0.247807 coeffs:0.821139 -0.147738 
-0.342160
+real: 0.338352 order:1 pred: 0.132198 var:0.247312 coeffs:0.880207 -0.058784  
0.000000
+real: 0.338352 order:2 pred: 0.152691 var:0.244638 coeffs:0.902707  0.049657 
-0.126906
+real:-0.804284 order:0 pred:-1.030523 var:0.247623 coeffs:0.814106 -0.146885 
-0.325423
+real:-0.804284 order:1 pred:-1.031056 var:0.247139 coeffs:0.872816 -0.058444  
0.000000
+real:-0.804284 order:2 pred:-1.053042 var:0.244747 coeffs:0.893448  0.044480 
-0.120412
+real:-0.457167 order:0 pred:-0.702792 var:0.247625 coeffs:0.809065 -0.169147 
-0.346438
+real:-0.457167 order:1 pred:-0.687305 var:0.246990 coeffs:0.876702 -0.067014  
0.000000
+real:-0.457167 order:2 pred:-0.654256 var:0.244305 coeffs:0.898006  0.043274 
-0.127588
+real:-0.021277 order:0 pred:-0.191599 var:0.246916 coeffs:0.808128 -0.173436 
-0.346486
+real:-0.021277 order:1 pred:-0.187182 var:0.246253 coeffs:0.877481 -0.068691  
0.000000
+real:-0.021277 order:2 pred:-0.187082 var:0.243589 coeffs:0.898787  0.041614 
-0.127605
+real: 0.474975 order:0 pred: 0.647991 var:0.246249 coeffs:0.804899 -0.168660 
-0.353942
+real: 0.474975 order:1 pred: 0.652517 var:0.245627 coeffs:0.872233 -0.066775  
0.000000
+real: 0.474975 order:2 pred: 0.637241 var:0.242870 coeffs:0.894429  0.045632 
-0.130228
+real:-0.800855 order:0 pred:-0.767087 var:0.244961 coeffs:0.805633 -0.170547 
-0.354244
+real:-0.800855 order:1 pred:-0.778254 var:0.244329 coeffs:0.873329 -0.067374  
0.000000
+real:-0.800855 order:2 pred:-0.818120 var:0.241581 coeffs:0.893466  0.045453 
-0.129490
+real: 0.209538 order:0 pred: 0.485866 var:0.245326 coeffs:0.801886 -0.146056 
-0.392328
+real: 0.209538 order:1 pred: 0.498375 var:0.244867 coeffs:0.859476 -0.057485  
0.000000
+real: 0.209538 order:2 pred: 0.442548 var:0.241536 coeffs:0.884225  0.064269 
-0.141929
+real:-0.895696 order:0 pred:-0.668009 var:0.245165 coeffs:0.806074 -0.151585 
-0.368322
+real:-0.895696 order:1 pred:-0.671663 var:0.244677 coeffs:0.865759 -0.059644  
0.000000
+real:-0.895696 order:2 pred:-0.635865 var:0.241772 coeffs:0.889886  0.053766 
-0.132604
+real: 0.111128 order:0 pred: 0.138592 var:0.243914 coeffs:0.805971 -0.150357 
-0.369829
+real: 0.111128 order:1 pred: 0.144640 var:0.243436 coeffs:0.865102 -0.059113  
0.000000
+real: 0.111128 order:2 pred: 0.114828 var:0.240522 coeffs:0.889833  0.053917 
-0.132712
+real: 0.848523 order:0 pred: 0.845359 var:0.242667 coeffs:0.806043 -0.150113 
-0.366819
+real: 0.848523 order:1 pred: 0.839505 var:0.242192 coeffs:0.865167 -0.058971  
0.000000
+real: 0.848523 order:2 pred: 0.801425 var:0.239341 coeffs:0.889835  0.053116 
-0.130902
+real:-0.595960 order:0 pred:-0.572420 var:0.241450 coeffs:0.806400 -0.150849 
-0.366251
+real:-0.595960 order:1 pred:-0.577667 var:0.240973 coeffs:0.865697 -0.059224  
0.000000
+real:-0.595960 order:2 pred:-0.568659 var:0.238145 coeffs:0.890581  0.052531 
-0.130660
+real:-0.583917 order:0 pred:-0.129630 var:0.244499 coeffs:0.807938 -0.065007 
-0.283182
+real:-0.583917 order:1 pred:-0.117718 var:0.244413 coeffs:0.833099 -0.025089  
0.000000
+real:-0.583917 order:2 pred:-0.071912 var:0.242767 coeffs:0.848874  0.063494 
-0.099647
diff --git a/tests/ref/fate/pca b/tests/ref/fate/pca
new file mode 100644
index 0000000000..ad8028b9d3
--- /dev/null
+++ b/tests/ref/fate/pca
@@ -0,0 +1,17 @@
+849.650515 743.274745 636.920659 530.755343 424.755389 318.590474 212.484686 
106.252862 
+849.764697 743.410613 637.245303 531.245347 425.080428 318.974636 212.742812 
+849.689859 743.524537 637.524585 531.359673 425.253890 319.022065 
+849.776432 743.776498 637.611630 531.505899 425.274066 
+849.990362 743.825483 637.719738 531.487907 
+850.117802 744.012025 637.780199 
+850.269319 744.037498 
+850.276172 
+0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 
+ 0.290322  0.341674  0.377201  0.395414  0.395503  0.377394  0.341970  
0.290771      4624.3 1.000000
+-0.490640 -0.415874 -0.277812 -0.097594  0.097294  0.277591  0.415558  
0.490312      1395.2 0.301722
+ 0.474460  0.255049 -0.138721 -0.437194 -0.436778 -0.137807  0.255211  
0.473875       310.8 0.067205
+ 0.415804 -0.098502 -0.490554 -0.276775  0.278062  0.490292  0.097473 
-0.415874       172.1 0.037219
+ 0.383198 -0.322121 -0.362784  0.343676  0.342516 -0.364096 -0.320857  
0.383196       103.2 0.022308
+ 0.277695 -0.491474  0.100186  0.414296 -0.416058 -0.097018  0.490004 
-0.277560        76.8 0.016617
+-0.209100  0.462903 -0.455335  0.189296  0.184546 -0.453372  0.463830 
-0.209984        61.9 0.013391
+ 0.096450 -0.275620  0.414337 -0.490706  0.491466 -0.416671  0.278467 
-0.097806        55.2 0.011938
diff --git a/tests/ref/fate/softfloat b/tests/ref/fate/softfloat
new file mode 100644
index 0000000000..25f744322d
--- /dev/null
+++ b/tests/ref/fate/softfloat
@@ -0,0 +1,12 @@
+test1 double=10369251
+test1 sf    =10369251
+test2 double=1660944384
+test2 sf    =1660944264 (7 830472132)
+test3 double: 1374.5489959717
+test3 softfloat: 1374.5312194824 (0x2af43ff0 11)
+test4 softfloat: -16.0000000000 (0xe0000000 5)
+test4 softfloat: 16.0000000000 (0x20000000 5)
+test4 softfloat: 536870911.0000000000 (0x3ffffffe 29)
+test4 softfloat: -536870911.0000000000 (0xc0000002 29)
+test5 softfloat: 0.0000000000 (0x00000000 -149)
+test6 softfloat: 0.0000000000 (0x00000000 -149) -536870912 536870912
diff --git a/tests/ref/fate/utf8 b/tests/ref/fate/utf8
new file mode 100644
index 0000000000..1402e84944
--- /dev/null
+++ b/tests/ref/fate/utf8
@@ -0,0 +1,31 @@
+41                  65         0x41         1     A
+0A                  10         0xA          1     \n
+C3A9                233        0xE9         2     é
+0A                  10         0xA          1     \n
+E282AC              8364       0x20AC       3     €
+0A                  10         0xA          1     \n
+F09F9880            128512     0x1F600      4     😀
+0A                  10         0xA          1     \n
+F48FBFBF            1114111    0x10FFFF     4     �
+0A                  10         0xA          1     \n
+F4908080            1114112    0x110000     4     invalid code range
+0A                  10         0xA          1     \n
+F888808080          2097152    0x200000     5     invalid code range
+0A                  10         0xA          1     \n
+C080                invalid sequence
+0A                  10         0xA          1     \n
+E08080              invalid sequence
+0A                  10         0xA          1     \n
+EDA080              55296      0xD800       3     invalid code range
+0A                  10         0xA          1     \n
+EFBFBF              65535      0xFFFF       3     invalid code range
+0A                  10         0xA          1     \n
+80                  invalid sequence
+0A                  10         0xA          1     \n
+FE                  invalid sequence
+0A                  10         0xA          1     \n
+C3                  invalid sequence
+41                  65         0x41         1     A
+0A                  10         0xA          1     \n
+E2                  invalid sequence
+82                  invalid sequence
-- 
2.52.0


From c1679a93a25416d9079556a5d01ffb3524f70207 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Kacper=20Michaj=C5=82ow?= <[email protected]>
Date: Tue, 22 Sep 2026 18:34:35 +0200
Subject: [PATCH 07/11] tests/fate/libavcodec: run the snow DWT test
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

libavcodec/tests/snowenc was compiled but never executed.

Signed-off-by: Kacper Michajłow <[email protected]>
---
 tests/fate/libavcodec.mak |  4 +++
 tests/ref/fate/snow-dwt   | 75 +++++++++++++++++++++++++++++++++++++++
 2 files changed, 79 insertions(+)
 create mode 100644 tests/ref/fate/snow-dwt

diff --git a/tests/fate/libavcodec.mak b/tests/fate/libavcodec.mak
index f6858c4921..500056ba46 100644
--- a/tests/fate/libavcodec.mak
+++ b/tests/fate/libavcodec.mak
@@ -95,6 +95,10 @@ fate-rangecoder: libavcodec/tests/rangecoder$(EXESUF)
 fate-rangecoder: CMD = run libavcodec/tests/rangecoder$(EXESUF)
 fate-rangecoder: CMP = null
 
+FATE_LIBAVCODEC-$(CONFIG_SNOW_ENCODER) += fate-snow-dwt
+fate-snow-dwt: libavcodec/tests/snowenc$(EXESUF)
+fate-snow-dwt: CMD = run libavcodec/tests/snowenc$(EXESUF)
+
 FATE_LIBAVCODEC-yes += fate-mathops
 fate-mathops: libavcodec/tests/mathops$(EXESUF)
 fate-mathops: CMD = run libavcodec/tests/mathops$(EXESUF)
diff --git a/tests/ref/fate/snow-dwt b/tests/ref/fate/snow-dwt
new file mode 100644
index 0000000000..373936cddc
--- /dev/null
+++ b/tests/ref/fate/snow-dwt
@@ -0,0 +1,75 @@
+testing 5/3 DWT
+testing 9/7 DWT
+       0        0        0        0        0        0        0        0        
0        0        0        0        0        0        0        0        0 
+       0        0        0        0        0        0        0        0        
0        0        0        0        0        0        0        0        0 
+       0        0        0        0        0        0        0        0        
0        0        0        0        0        0        0        0        0 
+       0        0        0        0        0        0        0        0        
0        0        0        0        0        0        0        0        0 
+       0        0        0        0        0        0        0        0        
0        0        0        0        0        0        0        0        0 
+       0        0        0        0        0       -6       -4       19       
65     -141       65       19       -4       -6        0        0        0 
+       0        0        0        0        0       -5       -3       12       
43      -95       43       12       -3       -5        0        0        0 
+       0        0        0        0        0       43       29     -113     
-408      904     -408     -113       29       43        0        0        0 
+       0        0        0        0        0       81       54     -216     
-774     1710     -774     -216       54       81        0        0        0 
+       0        0        0        0        0       43       29     -113     
-408      904     -408     -113       29       43        0        0        0 
+       0        0        0        0        0       -5       -3       12       
43      -95       43       12       -3       -5        0        0        0 
+       0        0        0        0        0       -6       -4       19       
65     -141       65       19       -4       -6        0        0        0 
+       0        0        0        0        0        0        0        0        
0        0        0        0        0        0        0        0        0 
+       0        0        0        0        0        0        0        0        
0        0        0        0        0        0        0        0        0 
+       0        0        0        0        0        0        0        0        
0        0        0        0        0        0        0        0        0 
+       0        0        0        0        0        0        0        0        
0        0        0        0        0        0        0        0        0 
+       0        0        0        0        0        0        0        0        
0        0        0        0        0        0        0        0        0 
+       0        0        0        0        0        0        0        0        
0        0        0        0        0        0        0        0        0 
+       0        0        0        0        0        0        0        0        
0        0        0        0        0        0        0        0        0 
+       0        0        0        0        0        0        0        0        
0        0        0        0        0        0        0        0        0 
+       0        0        0        0        0        0        0        0        
0        0        0        0        0        0        0        0        0 
+       0        0        0        0        0        0        0        0        
0        0        0        0        0        0        0        0        0 
+       0        0        0        0        0       -6       -4       43       
81       43       -4       -6        0        0        0        0        0 
+       0        0        0        0        0       -5       -3       28       
54       28       -3       -5        0        0        0        0        0 
+       0        0        0        0        0       18       12     -114     
-216     -114       12       18        0        0        0        0        0 
+       0        0        0        0        0       64       43     -409     
-774     -409       43       64        0        0        0        0        0 
+       0        0        0        0        0     -143      -95      902     
1710      902      -95     -143        0        0        0        0        0 
+       0        0        0        0        0       64       43     -409     
-774     -409       43       64        0        0        0        0        0 
+       0        0        0        0        0       18       12     -114     
-216     -114       12       18        0        0        0        0        0 
+       0        0        0        0        0       -5       -3       28       
54       28       -3       -5        0        0        0        0        0 
+       0        0        0        0        0       -6       -4       43       
81       43       -4       -6        0        0        0        0        0 
+       0        0        0        0        0        0        0        0        
0        0        0        0        0        0        0        0        0 
+       0        0        0        0        0        0        0        0        
0        0        0        0        0        0        0        0        0 
+       0        0        0        0        0        0        0        0        
0        0        0        0        0        0        0        0        0 
+       0        0        0        0        0        0        0        0        
0        0        0        0        0        0        0        0        0 
+       0        0        0        0        0        0        0        0        
0        0        0        0        0        0        0        0        0 
+       0        0        0        0        0        0        0        0        
0        0        0        0        0        0        0        0        0 
+       0        0        0        0        0        0        0        0        
0        0        0        0        0        0        0        0        0 
+       0        0        0        0        0        0        0        0        
0        0        0        0        0        0        0        0        0 
+       0        0        0        0        0        3        2       -6      
-24       54      -24       -6        2        3        0        0        0 
+       0        0        0        0        0        1        1       -5      
-16       36      -16       -5        1        1        0        0        0 
+       0        0        0        0        0       -6       -4       19       
65     -141       65       19       -4       -6        0        0        0 
+       0        0        0        0        0      -24      -16       64      
231     -511      231       64      -16      -24        0        0        0 
+       0        0        0        0        0       54       36     -143     
-511     1127     -511     -143       36       54        0        0        0 
+       0        0        0        0        0      -24      -16       64      
231     -511      231       64      -16      -24        0        0        0 
+       0        0        0        0        0       -6       -4       19       
65     -141       65       19       -4       -6        0        0        0 
+       0        0        0        0        0        1        1       -5      
-16       36      -16       -5        1        1        0        0        0 
+       0        0        0        0        0        3        2       -6      
-24       54      -24       -6        2        3        0        0        0 
+       0        0        0        0        0        0        0        0        
0        0        0        0        0        0        0        0        0 
+       0        0        0        0        0        0        0        0        
0        0        0        0        0        0        0        0        0 
+       0        0        0        0        0        0        0        0        
0        0        0        0        0        0        0        0        0 
+static int const visual_weight[][4]={
+  {   17661,   10919,   10911,    6749,},
+  {       0,    5176,    5175,    3105,},
+  {       0,    2585,    2584,    1633,},
+};
+       0        0        0        0        0        0        0        0        
1        1        1        1        1        1        1        1        1 
+   52429    52429    52429    52429    52429    52429    52429    52429  
-167772  -167772  -167772  -167772  -167772  -167772  -167772  -167772  -167772 
+       0        0        0        0        0        0        0        0        
1        1        1        1        1        1        1        1        1 
+   52429    52429    52429    52429    52429    52429    52429    52429  
-167772  -167772  -167772  -167772  -167772  -167772  -167772  -167772  -167772 
+       0        0        0        0        0        0        0        0        
1        1        1        1        1        1        1        1        1 
+   52429    52429    52429    52429    52429    52429    52429    52429  
-167772  -167772  -167772  -167772  -167772  -167772  -167772  -167772  -167772 
+       0        0        0        0        0        0        0        0        
1        1        1        1        1        1        1        1        1 
+   52429    52429    52429    52429    52429    52429    52429    52429  
-167772  -167772  -167772  -167772  -167772  -167772  -167772  -167772  -167772 
+       0        0        0        0        0        0        0        0        
1        1        1        1        1        1        1        1        1 
+   52429    52429    52429    52429    52429    52429    52429    52429  
-167772  -167772  -167772  -167772  -167772  -167772  -167772  -167772  -167772 
+       0        0        0        0        0        0        0        0        
1        1        1        1        1        1        1        1        1 
+   52429    52429    52429    52429    52429    52429    52429    52429  
-167772  -167772  -167772  -167772  -167772  -167772  -167772  -167772  -167772 
+       0        0        0        0        0        0        0        0        
1        1        1        1        1        1        1        1        1 
+   52429    52429    52429    52429    52429    52429    52429    52429  
-167772  -167772  -167772  -167772  -167772  -167772  -167772  -167772  -167772 
+       0        0        0        0        0        0        0        0        
1        1        1        1        1        1        1        1        1 
+   52429    52429    52429    52429    52429    52429    52429    52429  
-167772  -167772  -167772  -167772  -167772  -167772  -167772  -167772  -167772 
+       0        0        0        0        0        0        0        0        
1        1        1        1        1        1        1        1        1 
-- 
2.52.0


From ae177e1f1e59cdf8b3332c2525d86d9b0a247b48 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Kacper=20Michaj=C5=82ow?= <[email protected]>
Date: Tue, 22 Sep 2026 18:34:35 +0200
Subject: [PATCH 08/11] tests/fate/libavcodec: add reconstructed frame tests
 for snow
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

tools/enc_recon_frame_test was built but never run. snow is the only
internal encoder that exports reconstructed frames, so cover both of
its wavelets on a small conformance sample.

Signed-off-by: Kacper Michajłow <[email protected]>
---
 tests/fate/libavcodec.mak | 8 ++++++++
 1 file changed, 8 insertions(+)

diff --git a/tests/fate/libavcodec.mak b/tests/fate/libavcodec.mak
index 500056ba46..3cde003212 100644
--- a/tests/fate/libavcodec.mak
+++ b/tests/fate/libavcodec.mak
@@ -122,5 +122,13 @@ FATE_LIBAVCODEC-yes += fate-libavcodec-htmlsubtitles
 fate-libavcodec-htmlsubtitles: libavcodec/tests/htmlsubtitles$(EXESUF)
 fate-libavcodec-htmlsubtitles: CMD = run 
libavcodec/tests/htmlsubtitles$(EXESUF)
 
+FATE_SAMPLES_ENC_RECON-$(call DEMDEC, H264, H264, H264_PARSER SNOW_ENCODER 
SNOW_DECODER SWSCALE) += fate-enc-recon-snow-97 fate-enc-recon-snow-53
+fate-enc-recon-snow-97: CMD = run tools/enc_recon_frame_test$(EXESUF) 
$(TARGET_SAMPLES)/h264-conformance/SVA_NL2_E.264 snow pred=dwt97
+fate-enc-recon-snow-53: CMD = run tools/enc_recon_frame_test$(EXESUF) 
$(TARGET_SAMPLES)/h264-conformance/SVA_NL2_E.264 snow pred=dwt53
+$(FATE_SAMPLES_ENC_RECON-yes): tools/enc_recon_frame_test$(EXESUF)
+$(FATE_SAMPLES_ENC_RECON-yes): CMP = null
+FATE_EXTERN-yes += $(FATE_SAMPLES_ENC_RECON-yes)
+fate-enc-recon: $(FATE_SAMPLES_ENC_RECON-yes)
+
 FATE-$(CONFIG_AVCODEC) += $(FATE_LIBAVCODEC-yes)
 fate-libavcodec: $(FATE_LIBAVCODEC-yes)
-- 
2.52.0


From c550fcc4fb29064ca4c29cefa2bfc2183bc324e8 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Kacper=20Michaj=C5=82ow?= <[email protected]>
Date: Tue, 22 Sep 2026 18:34:35 +0200
Subject: [PATCH 09/11] tests/fate/filter-video: run the drawutils and nlmeans
 integral tests
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Both programs were compiled but never executed.

Signed-off-by: Kacper Michajłow <[email protected]>
---
 tests/fate/filter-video.mak     |   9 ++
 tests/ref/fate/filter-drawutils | 268 ++++++++++++++++++++++++++++++++
 2 files changed, 277 insertions(+)
 create mode 100644 tests/ref/fate/filter-drawutils

diff --git a/tests/fate/filter-video.mak b/tests/fate/filter-video.mak
index b0284c9813..cfd46a48e5 100644
--- a/tests/fate/filter-video.mak
+++ b/tests/fate/filter-video.mak
@@ -508,6 +508,15 @@ fate-filter-drawvg-interpreter: $(DRAWVG_SCRIPT_ALL)
 fate-filter-drawvg-interpreter: libavfilter/tests/drawvg$(EXESUF)
 fate-filter-drawvg-interpreter: CMD = run libavfilter/tests/drawvg$(EXESUF) 
$(DRAWVG_SCRIPT_ALL)
 
+FATE_FILTER-yes += fate-filter-drawutils
+fate-filter-drawutils: libavfilter/tests/drawutils$(EXESUF)
+fate-filter-drawutils: CMD = run libavfilter/tests/drawutils$(EXESUF)
+
+FATE_FILTER-$(CONFIG_NLMEANS_FILTER) += fate-filter-nlmeans-integral
+fate-filter-nlmeans-integral: libavfilter/tests/integral$(EXESUF)
+fate-filter-nlmeans-integral: CMD = run libavfilter/tests/integral$(EXESUF)
+fate-filter-nlmeans-integral: CMP = null
+
 FATE_FILTER_SAMPLES-$(call FILTERDEMDEC, FPS SCALE, MOV, QTRLE) += 
fate-filter-fps-cfr fate-filter-fps
 fate-filter-fps-cfr: CMD = framecrc -auto_conversion_filters -i 
$(TARGET_SAMPLES)/qtrle/apple-animation-variable-fps-bug.mov -r 30 -fps_mode 
cfr -pix_fmt yuv420p
 fate-filter-fps:     CMD = framecrc -auto_conversion_filters -i 
$(TARGET_SAMPLES)/qtrle/apple-animation-variable-fps-bug.mov -vf fps=30 
-pix_fmt yuv420p
diff --git a/tests/ref/fate/filter-drawutils b/tests/ref/fate/filter-drawutils
new file mode 100644
index 0000000000..16a9e951c4
--- /dev/null
+++ b/tests/ref/fate/filter-drawutils
@@ -0,0 +1,268 @@
+Testing yuv420p...         ok
+Testing yuyv422...         no: Function not implemented
+Testing rgb24...           ok
+Testing bgr24...           ok
+Testing yuv422p...         ok
+Testing yuv444p...         ok
+Testing yuv410p...         ok
+Testing yuv411p...         ok
+Testing gray...            ok
+Testing monow...           no: Function not implemented
+Testing monob...           no: Function not implemented
+Testing pal8...            no: Function not implemented
+Testing yuvj420p...        ok
+Testing yuvj422p...        ok
+Testing yuvj444p...        ok
+Testing uyvy422...         no: Function not implemented
+Testing uyyvyy411...       no: Function not implemented
+Testing bgr8...            no: Function not implemented
+Testing bgr4...            no: Function not implemented
+Testing bgr4_byte...       no: Function not implemented
+Testing rgb8...            no: Function not implemented
+Testing rgb4...            no: Function not implemented
+Testing rgb4_byte...       no: Function not implemented
+Testing nv12...            ok
+Testing nv21...            ok
+Testing argb...            ok
+Testing rgba...            ok
+Testing abgr...            ok
+Testing bgra...            ok
+Testing gray16be...        no: Function not implemented
+Testing gray16le...        ok
+Testing yuv440p...         ok
+Testing yuvj440p...        ok
+Testing yuva420p...        ok
+Testing rgb48be...         no: Function not implemented
+Testing rgb48le...         ok
+Testing rgb565be...        no: Function not implemented
+Testing rgb565le...        no: Function not implemented
+Testing rgb555be...        no: Function not implemented
+Testing rgb555le...        no: Function not implemented
+Testing bgr565be...        no: Function not implemented
+Testing bgr565le...        no: Function not implemented
+Testing bgr555be...        no: Function not implemented
+Testing bgr555le...        no: Function not implemented
+Testing vaapi...           no: Function not implemented
+Testing yuv420p16le...     ok
+Testing yuv420p16be...     no: Function not implemented
+Testing yuv422p16le...     ok
+Testing yuv422p16be...     no: Function not implemented
+Testing yuv444p16le...     ok
+Testing yuv444p16be...     no: Function not implemented
+Testing dxva2_vld...       no: Function not implemented
+Testing rgb444le...        no: Function not implemented
+Testing rgb444be...        no: Function not implemented
+Testing bgr444le...        no: Function not implemented
+Testing bgr444be...        no: Function not implemented
+Testing ya8...             ok
+Testing bgr48be...         no: Function not implemented
+Testing bgr48le...         ok
+Testing yuv420p9be...      no: Function not implemented
+Testing yuv420p9le...      ok
+Testing yuv420p10be...     no: Function not implemented
+Testing yuv420p10le...     ok
+Testing yuv422p10be...     no: Function not implemented
+Testing yuv422p10le...     ok
+Testing yuv444p9be...      no: Function not implemented
+Testing yuv444p9le...      ok
+Testing yuv444p10be...     no: Function not implemented
+Testing yuv444p10le...     ok
+Testing yuv422p9be...      no: Function not implemented
+Testing yuv422p9le...      ok
+Testing gbrp...            ok
+Testing gbrp9be...         no: Function not implemented
+Testing gbrp9le...         ok
+Testing gbrp10be...        no: Function not implemented
+Testing gbrp10le...        ok
+Testing gbrp16be...        no: Function not implemented
+Testing gbrp16le...        ok
+Testing yuva422p...        ok
+Testing yuva444p...        ok
+Testing yuva420p9be...     no: Function not implemented
+Testing yuva420p9le...     ok
+Testing yuva422p9be...     no: Function not implemented
+Testing yuva422p9le...     ok
+Testing yuva444p9be...     no: Function not implemented
+Testing yuva444p9le...     ok
+Testing yuva420p10be...    no: Function not implemented
+Testing yuva420p10le...    ok
+Testing yuva422p10be...    no: Function not implemented
+Testing yuva422p10le...    ok
+Testing yuva444p10be...    no: Function not implemented
+Testing yuva444p10le...    ok
+Testing yuva420p16be...    no: Function not implemented
+Testing yuva420p16le...    ok
+Testing yuva422p16be...    no: Function not implemented
+Testing yuva422p16le...    ok
+Testing yuva444p16be...    no: Function not implemented
+Testing yuva444p16le...    ok
+Testing vdpau...           no: Function not implemented
+Testing xyz12le...         no: Function not implemented
+Testing xyz12be...         no: Function not implemented
+Testing nv16...            ok
+Testing nv20le...          ok
+Testing nv20be...          no: Function not implemented
+Testing rgba64be...        no: Function not implemented
+Testing rgba64le...        no: Function not implemented
+Testing bgra64be...        no: Function not implemented
+Testing bgra64le...        no: Function not implemented
+Testing yvyu422...         no: Function not implemented
+Testing ya16be...          no: Function not implemented
+Testing ya16le...          ok
+Testing gbrap...           ok
+Testing gbrap16be...       no: Function not implemented
+Testing gbrap16le...       ok
+Testing qsv...             no: Function not implemented
+Testing mmal...            no: Function not implemented
+Testing d3d11va_vld...     no: Function not implemented
+Testing cuda...            no: Function not implemented
+Testing 0rgb...            ok
+Testing rgb0...            ok
+Testing 0bgr...            ok
+Testing bgr0...            ok
+Testing yuv420p12be...     no: Function not implemented
+Testing yuv420p12le...     ok
+Testing yuv420p14be...     no: Function not implemented
+Testing yuv420p14le...     ok
+Testing yuv422p12be...     no: Function not implemented
+Testing yuv422p12le...     ok
+Testing yuv422p14be...     no: Function not implemented
+Testing yuv422p14le...     ok
+Testing yuv444p12be...     no: Function not implemented
+Testing yuv444p12le...     ok
+Testing yuv444p14be...     no: Function not implemented
+Testing yuv444p14le...     ok
+Testing gbrp12be...        no: Function not implemented
+Testing gbrp12le...        ok
+Testing gbrp14be...        no: Function not implemented
+Testing gbrp14le...        ok
+Testing yuvj411p...        ok
+Testing bayer_bggr8...     no: Function not implemented
+Testing bayer_rggb8...     no: Function not implemented
+Testing bayer_gbrg8...     no: Function not implemented
+Testing bayer_grbg8...     no: Function not implemented
+Testing bayer_bggr16le...  no: Function not implemented
+Testing bayer_bggr16be...  no: Function not implemented
+Testing bayer_rggb16le...  no: Function not implemented
+Testing bayer_rggb16be...  no: Function not implemented
+Testing bayer_gbrg16le...  no: Function not implemented
+Testing bayer_gbrg16be...  no: Function not implemented
+Testing bayer_grbg16le...  no: Function not implemented
+Testing bayer_grbg16be...  no: Function not implemented
+Testing yuv440p10le...     ok
+Testing yuv440p10be...     no: Function not implemented
+Testing yuv440p12le...     ok
+Testing yuv440p12be...     no: Function not implemented
+Testing ayuv64le...        no: Function not implemented
+Testing ayuv64be...        no: Function not implemented
+Testing videotoolbox_vld...no: Function not implemented
+Testing p010le...          ok
+Testing p010be...          no: Function not implemented
+Testing gbrap12be...       no: Function not implemented
+Testing gbrap12le...       ok
+Testing gbrap10be...       no: Function not implemented
+Testing gbrap10le...       ok
+Testing mediacodec...      no: Function not implemented
+Testing gray12be...        no: Function not implemented
+Testing gray12le...        ok
+Testing gray10be...        no: Function not implemented
+Testing gray10le...        ok
+Testing p016le...          ok
+Testing p016be...          no: Function not implemented
+Testing d3d11...           no: Function not implemented
+Testing gray9be...         no: Function not implemented
+Testing gray9le...         ok
+Testing gbrpf32be...       no: Function not implemented
+Testing gbrpf32le...       no: Function not implemented
+Testing gbrapf32be...      no: Function not implemented
+Testing gbrapf32le...      no: Function not implemented
+Testing drm_prime...       no: Function not implemented
+Testing opencl...          no: Function not implemented
+Testing gray14be...        no: Function not implemented
+Testing gray14le...        ok
+Testing grayf32be...       no: Function not implemented
+Testing grayf32le...       no: Function not implemented
+Testing yuva422p12be...    no: Function not implemented
+Testing yuva422p12le...    ok
+Testing yuva444p12be...    no: Function not implemented
+Testing yuva444p12le...    ok
+Testing nv24...            ok
+Testing nv42...            ok
+Testing vulkan...          no: Function not implemented
+Testing y210be...          no: Function not implemented
+Testing y210le...          no: Function not implemented
+Testing x2rgb10le...       no: Function not implemented
+Testing x2rgb10be...       no: Function not implemented
+Testing x2bgr10le...       no: Function not implemented
+Testing x2bgr10be...       no: Function not implemented
+Testing p210be...          no: Function not implemented
+Testing p210le...          ok
+Testing p410be...          no: Function not implemented
+Testing p410le...          ok
+Testing p216be...          no: Function not implemented
+Testing p216le...          ok
+Testing p416be...          no: Function not implemented
+Testing p416le...          ok
+Testing vuya...            ok
+Testing rgbaf16be...       no: Function not implemented
+Testing rgbaf16le...       no: Function not implemented
+Testing vuyx...            ok
+Testing p012le...          ok
+Testing p012be...          no: Function not implemented
+Testing y212be...          no: Function not implemented
+Testing y212le...          no: Function not implemented
+Testing xv30be...          no: Function not implemented
+Testing xv30le...          no: Function not implemented
+Testing xv36be...          no: Function not implemented
+Testing xv36le...          no: Function not implemented
+Testing rgbf32be...        no: Function not implemented
+Testing rgbf32le...        no: Function not implemented
+Testing rgbaf32be...       no: Function not implemented
+Testing rgbaf32le...       no: Function not implemented
+Testing p212be...          no: Function not implemented
+Testing p212le...          ok
+Testing p412be...          no: Function not implemented
+Testing p412le...          ok
+Testing gbrap14be...       no: Function not implemented
+Testing gbrap14le...       ok
+Testing d3d12...           no: Function not implemented
+Testing ayuv...            ok
+Testing uyva...            ok
+Testing vyu444...          ok
+Testing v30xbe...          no: Function not implemented
+Testing v30xle...          no: Function not implemented
+Testing rgbf16be...        no: Function not implemented
+Testing rgbf16le...        no: Function not implemented
+Testing rgba128be...       no: Function not implemented
+Testing rgba128le...       no: Function not implemented
+Testing rgb96be...         no: Function not implemented
+Testing rgb96le...         no: Function not implemented
+Testing y216be...          no: Function not implemented
+Testing y216le...          no: Function not implemented
+Testing xv48be...          no: Function not implemented
+Testing xv48le...          no: Function not implemented
+Testing gbrpf16be...       no: Function not implemented
+Testing gbrpf16le...       no: Function not implemented
+Testing gbrapf16be...      no: Function not implemented
+Testing gbrapf16le...      no: Function not implemented
+Testing grayf16be...       no: Function not implemented
+Testing grayf16le...       no: Function not implemented
+Testing amf...             no: Function not implemented
+Testing gray32be...        no: Function not implemented
+Testing gray32le...        no: Function not implemented
+Testing yaf32be...         no: Function not implemented
+Testing yaf32le...         no: Function not implemented
+Testing yaf16be...         no: Function not implemented
+Testing yaf16le...         no: Function not implemented
+Testing gbrap32be...       no: Function not implemented
+Testing gbrap32le...       no: Function not implemented
+Testing yuv444p10msbbe...  no: Function not implemented
+Testing yuv444p10msble...  ok
+Testing yuv444p12msbbe...  no: Function not implemented
+Testing yuv444p12msble...  ok
+Testing gbrp10msbbe...     no: Function not implemented
+Testing gbrp10msble...     ok
+Testing gbrp12msbbe...     no: Function not implemented
+Testing gbrp12msble...     ok
+Testing ohcodec...         no: Function not implemented
+Testing cuarray...         no: Function not implemented
-- 
2.52.0


From 857fd13cba20c331864f2c285c6a377d2d3b9c9a Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Kacper=20Michaj=C5=82ow?= <[email protected]>
Date: Tue, 22 Sep 2026 18:34:35 +0200
Subject: [PATCH 10/11] tests/fate/libswscale: run the rgb2rgb bounds test
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

The colorspace test program checks every rgb2rgb converter for
out-of-bounds writes and returns the number of failing converters.

Signed-off-by: Kacper Michajłow <[email protected]>
---
 tests/fate/libswscale.mak | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/tests/fate/libswscale.mak b/tests/fate/libswscale.mak
index 9de79d736b..887f0cbf08 100644
--- a/tests/fate/libswscale.mak
+++ b/tests/fate/libswscale.mak
@@ -6,6 +6,11 @@ FATE_LIBSWSCALE += fate-sws-floatimg-cmp
 fate-sws-floatimg-cmp: libswscale/tests/floatimg_cmp$(EXESUF)
 fate-sws-floatimg-cmp: CMD = run libswscale/tests/floatimg_cmp$(EXESUF)
 
+FATE_LIBSWSCALE += fate-sws-rgb2rgb-bounds
+fate-sws-rgb2rgb-bounds: libswscale/tests/colorspace$(EXESUF)
+fate-sws-rgb2rgb-bounds: CMD = run libswscale/tests/colorspace$(EXESUF)
+fate-sws-rgb2rgb-bounds: CMP = null
+
 SWS_SLICE_TEST-$(call DEMDEC, MATROSKA, VP9) += 
fate-sws-slice-yuv422-12bit-rgb48
 fate-sws-slice-yuv422-12bit-rgb48: CMD = run tools/scale_slice_test$(EXESUF) 
$(TARGET_SAMPLES)/vp9-test-vectors/vp93-2-20-12bit-yuv422.webm 150 100 rgb48
 
-- 
2.52.0


From 4fc797f11c08602c8aad26c11fd2947442187cec Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Kacper=20Michaj=C5=82ow?= <[email protected]>
Date: Tue, 22 Sep 2026 18:34:36 +0200
Subject: [PATCH 11/11] tests/fate/libswresample: run the swresample self test
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

The program round-trips random format, layout and rate pairs and prints
error metrics without checking them, so this only guards against
crashes and failed initialization. 1000 of the 10000 default cases keep
it under a second.

Signed-off-by: Kacper Michajłow <[email protected]>
---
 tests/fate/libswresample.mak | 8 ++++++++
 1 file changed, 8 insertions(+)

diff --git a/tests/fate/libswresample.mak b/tests/fate/libswresample.mak
index d23525edbc..cd2d9105ed 100644
--- a/tests/fate/libswresample.mak
+++ b/tests/fate/libswresample.mak
@@ -1153,6 +1153,14 @@ FATE_SWR_REALLOC-$(CONFIG_SWRESAMPLE) += 
fate-swr-resample-realloc
 fate-swr-resample-realloc: 
libswresample/tests/swresample_resample_realloc$(EXESUF)
 fate-swr-resample-realloc: CMD = run 
libswresample/tests/swresample_resample_realloc$(EXESUF)
 
+# A subset of the 10000 default cases to keep the run time short
+FATE_SWR_SELFTEST-$(CONFIG_SWRESAMPLE) += fate-swr-selftest
+fate-swr-selftest: libswresample/tests/swresample$(EXESUF)
+fate-swr-selftest: CMD = run libswresample/tests/swresample$(EXESUF) 1000
+fate-swr-selftest: CMP = null
+
+FATE_SWR += $(FATE_SWR_SELFTEST-yes)
+
 FATE_SWR += $(FATE_SWR_REALLOC-yes)
 
 FATE_FFMPEG += $(FATE_SWR)
-- 
2.52.0

_______________________________________________
ffmpeg-devel mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to