浏览代码

Added ringbuffer test.

Branimir Karadžić 8 年之前
父节点
当前提交
7414d14300
共有 2 个文件被更改,包括 22 次插入2 次删除
  1. 2 2
      include/bx/inline/ringbuffer.inl
  2. 20 0
      tests/ringbuffer_test.cpp

+ 2 - 2
include/bx/inline/ringbuffer.inl

@@ -38,13 +38,13 @@ namespace bx
 		return size;
 	}
 
-	inline uint32_t RingBufferControl::reserve(uint32_t _size)
+	inline uint32_t RingBufferControl::reserve(uint32_t _size, bool _mustSucceed)
 	{
 		const uint32_t dist       = distance(m_write, m_read)-1;
 		const uint32_t maxSize    = uint32_sels(dist, m_size-1, dist);
 		const uint32_t sizeNoSign = uint32_and(_size, 0x7fffffff);
 		const uint32_t test       = uint32_sub(sizeNoSign, maxSize);
-		const uint32_t size       = uint32_sels(test, _size, maxSize);
+		const uint32_t size       = uint32_sels(test, _size, _mustSucceed ? 0 : maxSize);
 		const uint32_t advance    = uint32_add(m_write, size);
 		const uint32_t write      = uint32_mod(advance, m_size);
 		m_write = write;

+ 20 - 0
tests/ringbuffer_test.cpp

@@ -0,0 +1,20 @@
+/*
+ * Copyright 2010-2017 Branimir Karadzic. All rights reserved.
+ * License: https://github.com/bkaradzic/bx#license-bsd-2-clause
+ */
+
+#include "test.h"
+#include <bx/ringbuffer.h>
+
+TEST_CASE("RingBufferControl", "")
+{
+	bx::RingBufferControl control(16);
+
+	REQUIRE(1  == control.reserve(1)  );
+	REQUIRE(0  == control.reserve(16, true) );
+	REQUIRE(14 == control.reserve(16) );
+	REQUIRE(15 == control.commit(15)  );
+	REQUIRE(15 == control.available() );
+	REQUIRE(15 == control.consume(15) );
+	REQUIRE(0  == control.available() );
+}