diff mbox series

[FFmpeg-devel,2/2] lavc/tests/bitstream: test bits_*_signed_nz and bits_peek_signed*

Message ID 20230115095934.9065-2-anton@khirnov.net
State Accepted
Commit ba36e6ed5213571162c7ef4db6fab3c0c2090212
Headers show
Series [FFmpeg-devel,1/2] lavc/bitstream: avoid UB in bits_{read, peek}_signed(0) | expand

Checks

Context Check Description
yinshiyou/make_loongarch64 success Make finished
yinshiyou/make_fate_loongarch64 success Make fate finished

Commit Message

Anton Khirnov Jan. 15, 2023, 9:59 a.m. UTC
---
 libavcodec/tests/bitstream_template.c | 19 ++++++++++++++++++-
 1 file changed, 18 insertions(+), 1 deletion(-)
diff mbox series

Patch

diff --git a/libavcodec/tests/bitstream_template.c b/libavcodec/tests/bitstream_template.c
index 13e92a31c6..ef59845154 100644
--- a/libavcodec/tests/bitstream_template.c
+++ b/libavcodec/tests/bitstream_template.c
@@ -42,6 +42,7 @@  enum Op {
     OP_READ_63,
     OP_READ_64,
     OP_READ_SIGNED,
+    OP_READ_SIGNED_NZ,
     OP_APPLY_SIGN,
     OP_ALIGN,
     OP_NB,
@@ -58,7 +59,7 @@  int main(int argc, char **argv)
 
     uint32_t random_seed;
     uint64_t val, val1;
-    int32_t  sval;
+    int32_t  sval, sval1;
     unsigned count;
 
     /* generate random input, using a given or random seed */
@@ -130,10 +131,26 @@  int main(int argc, char **argv)
             break;
         case OP_READ_SIGNED:
             count = av_lfg_get(&lfg) % FFMIN(33, bits_left(&bc) + 1);
+            sval1 = bits_peek_signed(&bc, count);
             sval  = bits_read_signed(&bc, count);
 
             fprintf(stderr, "%d read_signed %u: %"PRId32"\n", bits_tell(&bc) - count, count, sval);
 
+            av_assert0(sval == sval1);
+
+            if (count == 32) put_bits32(&pb, sval);
+            else             put_sbits(&pb, count, sval);
+            break;
+        case OP_READ_SIGNED_NZ:
+            count = av_lfg_get(&lfg) % FFMIN(33, bits_left(&bc) + 1);
+            count = FFMAX(count, 1);
+            sval1 = bits_peek_signed_nz(&bc, count);
+            sval  = bits_read_signed_nz(&bc, count);
+
+            fprintf(stderr, "%d read_signed_nz %u: %"PRId32"\n", bits_tell(&bc) - count, count, sval);
+
+            av_assert0(sval == sval1);
+
             if (count == 32) put_bits32(&pb, sval);
             else             put_sbits(&pb, count, sval);
             break;