diff --git a/test/bitwriter_buffer_test.cc b/test/bitwriter_buffer_test.cc
new file mode 100644
index 0000000..b1ba78a
--- /dev/null
+++ b/test/bitwriter_buffer_test.cc
@@ -0,0 +1,102 @@
+/*
+ * Copyright (c) 2025, Alliance for Open Media. All rights reserved.
+ *
+ * This source code is subject to the terms of the BSD 2 Clause License and
+ * the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
+ * was not distributed with this source code in the LICENSE file, you can
+ * obtain it at www.aomedia.org/license/software. If the Alliance for Open
+ * Media Patent License 1.0 was not distributed with this source code in the
+ * PATENTS file, you can obtain it at www.aomedia.org/license/patent.
+ */
+
+#include "gtest/gtest.h"
+
+#include "aom_dsp/bitwriter_buffer.h"
+
+namespace {
+
+// Test the examples in Table 25 in ITU-T H.274 (V3) (09/2023) and a few more.
+//
+// Bit string    codeNum
+//     1            0
+//    010           1
+//    011           2
+//   00100          3
+//   00101          4
+//   00110          5
+//   00111          6
+//  0001000         7
+//  0001001         8
+//  0001010         9
+//  0001011        10
+//  0001100        11
+//  0001101        12
+//  0001110        13
+//  0001111        14
+TEST(BitwriterBufferTest, UvlcOneByte) {
+  static constexpr struct {
+    uint32_t bit_offset;
+    uint8_t byte;
+  } kExpected[] = {
+    { 1, 0x80 },  // 0
+    { 3, 0x40 },  // 1
+    { 3, 0x60 },  // 2
+    { 5, 0x20 },  // 3
+    { 5, 0x28 },  // 4
+    { 5, 0x30 },  // 5
+    { 5, 0x38 },  // 6
+    { 7, 0x10 },  // 7
+    { 7, 0x12 },  // 8
+    { 7, 0x14 },  // 9
+    { 7, 0x16 },  // 10
+    { 7, 0x18 },  // 11
+    { 7, 0x1a },  // 12
+    { 7, 0x1c },  // 13
+    { 7, 0x1e },  // 14
+  };
+  uint8_t dst[1];
+
+  for (int i = 0; i < 15; i++) {
+    struct aom_write_bit_buffer wb = { dst, 0 };
+    aom_wb_write_uvlc(&wb, i);
+    ASSERT_EQ(wb.bit_offset, kExpected[i].bit_offset);
+    EXPECT_EQ(wb.bit_buffer[0], kExpected[i].byte);
+  }
+}
+
+// Tests two values with the maximum number (31) of leading zero bits.
+TEST(BitwriterBufferTest, Uvlc31LeadingZeros) {
+  uint8_t dst[8];
+
+  // 2^31 - 1
+  {
+    struct aom_write_bit_buffer wb = { dst, 0 };
+    aom_wb_write_uvlc(&wb, 0x7fffffff);
+    ASSERT_EQ(wb.bit_offset, 63u);
+    EXPECT_EQ(wb.bit_buffer[0], 0x00);
+    EXPECT_EQ(wb.bit_buffer[1], 0x00);
+    EXPECT_EQ(wb.bit_buffer[2], 0x00);
+    EXPECT_EQ(wb.bit_buffer[3], 0x01);
+    EXPECT_EQ(wb.bit_buffer[4], 0x00);
+    EXPECT_EQ(wb.bit_buffer[5], 0x00);
+    EXPECT_EQ(wb.bit_buffer[6], 0x00);
+    EXPECT_EQ(wb.bit_buffer[7], 0x00);
+  }
+
+  // 2^32 - 2
+  {
+    struct aom_write_bit_buffer wb = { dst, 0 };
+    aom_wb_write_uvlc(&wb, 0xfffffffe);
+    ASSERT_EQ(wb.bit_offset, 63u);
+    EXPECT_EQ(wb.bit_buffer[0], 0x00);
+    EXPECT_EQ(wb.bit_buffer[1], 0x00);
+    EXPECT_EQ(wb.bit_buffer[2], 0x00);
+    EXPECT_EQ(wb.bit_buffer[3], 0x01);
+    EXPECT_EQ(wb.bit_buffer[4], 0xff);
+    EXPECT_EQ(wb.bit_buffer[5], 0xff);
+    EXPECT_EQ(wb.bit_buffer[6], 0xff);
+    EXPECT_EQ(wb.bit_buffer[7], 0xfe);
+  }
+}
+
+}  // namespace
diff --git a/test/test.cmake b/test/test.cmake
index 9dfc20f..9a9cac1 100644
--- a/test/test.cmake
+++ b/test/test.cmake
@@ -141,6 +141,7 @@
               "${AOM_ROOT}/test/aom_mem_test.cc"
               "${AOM_ROOT}/test/av1_common_int_test.cc"
               "${AOM_ROOT}/test/av1_scale_test.cc"
+              "${AOM_ROOT}/test/bitwriter_buffer_test.cc"
               "${AOM_ROOT}/test/cdef_test.cc"
               "${AOM_ROOT}/test/cfl_test.cc"
               "${AOM_ROOT}/test/convolve_test.cc"
