package ring_buffer_tests import "core:testing" import "lib:container/ring_buffer" @(test) test_append_at_start :: proc(t: ^testing.T) { rb: ring_buffer.Ring_Buffer ring_buffer.init(&rb) defer ring_buffer.destroy(&rb) ring_buffer.append(&rb, {'F', 'o', 'o', 'b', 'a', 'r'}) testing.expect(t, rb.off == 0 && rb.len == 6, "failed to append Foobar") } @(test) test_append_at_mid :: proc(t: ^testing.T) { rb: ring_buffer.Ring_Buffer ring_buffer.init(&rb) defer ring_buffer.destroy(&rb) rb.off += rb.cap / 2 ring_buffer.append(&rb, {'F', 'o', 'o', 'b', 'a', 'r'}) testing.expect(t, rb.off == rb.cap / 2 && rb.len == 6, "failed to append Foobar") } @(test) test_append_multi :: proc(t: ^testing.T) { rb: ring_buffer.Ring_Buffer ring_buffer.init(&rb) defer ring_buffer.destroy(&rb) ring_buffer.append(&rb, {'F', 'o', 'o', 'b', 'a', 'r'}) ring_buffer.append(&rb, {'F', 'o', 'o', 'b', 'a', 'r'}) testing.expect(t, rb.off == 0 && rb.len == 12, "failed to append Foobar") } @(test) test_append_over_border :: proc(t: ^testing.T) { rb: ring_buffer.Ring_Buffer ring_buffer.init(&rb) defer ring_buffer.destroy(&rb) rb.off += rb.cap - 3 ring_buffer.append(&rb, {'F', 'o', 'o', 'b', 'a', 'r'}) testing.expect(t, rb.off == rb.cap - 3 && rb.len == 6, "failed to append Foobar") } @(test) test_consume_at_start :: proc(t: ^testing.T) { rb: ring_buffer.Ring_Buffer ring_buffer.init(&rb) defer ring_buffer.destroy(&rb) ring_buffer.append(&rb, {'F', 'o', 'o', 'b', 'a', 'r'}) buf := ring_buffer.consume_front(&rb, 6) defer delete(buf) testing.expectf(t, buf != nil && len(buf) == 6, "couldn't consume: %s", buf) } @(test) test_consume_over_border :: proc(t: ^testing.T) { rb: ring_buffer.Ring_Buffer ring_buffer.init(&rb) defer ring_buffer.destroy(&rb) rb.off += rb.cap - 3 ring_buffer.append(&rb, {'F', 'o', 'o', 'b', 'a', 'r'}) buf := ring_buffer.consume_front(&rb, 6) defer delete(buf) testing.expectf(t, buf != nil && len(buf) == 6 && rb.off < rb.cap, "couldn't consume: %s", buf) } @(test) test_grow_contained :: proc(t: ^testing.T) { rb: ring_buffer.Ring_Buffer ring_buffer.init(&rb) defer ring_buffer.destroy(&rb) ring_buffer.append(&rb, {'F', 'o', 'o', 'b', 'a', 'r'}) cap := rb.cap ring_buffer.grow(&rb) testing.expect(t, rb.len == 6 && cap * 2 == rb.cap && string(rb.buf[:6]) == "Foobar", "couldn't grow") } @(test) test_grow_over_border :: proc(t: ^testing.T) { rb: ring_buffer.Ring_Buffer ring_buffer.init(&rb) defer ring_buffer.destroy(&rb) rb.off += rb.cap - 3 ring_buffer.append(&rb, {'F', 'o', 'o', 'b', 'a', 'r'}) cap := rb.cap ring_buffer.grow(&rb) testing.expect(t, rb.len == 6 && cap * 2 == rb.cap && string(rb.buf[:6]) == "Foobar", "couldn't grow") } @(test) test_grow_with_append :: proc(t: ^testing.T) { rb: ring_buffer.Ring_Buffer ring_buffer.init(&rb, 4) defer ring_buffer.destroy(&rb) ring_buffer.append(&rb, {'F', 'o', 'o', 'b', 'a', 'r'}) testing.expect(t, rb.len == 6 && rb.cap == 8 && string(rb.buf[:6]) == "Foobar", "couldn't grow") }