1f2f262c3SMark Cave-Ayland /* 2f2f262c3SMark Cave-Ayland * Fifo8 tests 3f2f262c3SMark Cave-Ayland * 4f2f262c3SMark Cave-Ayland * Copyright 2024 Mark Cave-Ayland 5f2f262c3SMark Cave-Ayland * 6f2f262c3SMark Cave-Ayland * Authors: 7f2f262c3SMark Cave-Ayland * Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk> 8f2f262c3SMark Cave-Ayland * 9f2f262c3SMark Cave-Ayland * This work is licensed under the terms of the GNU LGPL, version 2 or later. 10f2f262c3SMark Cave-Ayland * See the COPYING.LIB file in the top-level directory. 11f2f262c3SMark Cave-Ayland */ 12f2f262c3SMark Cave-Ayland 13f2f262c3SMark Cave-Ayland #include "qemu/osdep.h" 14f2f262c3SMark Cave-Ayland #include "migration/vmstate.h" 15f2f262c3SMark Cave-Ayland #include "qemu/fifo8.h" 16f2f262c3SMark Cave-Ayland 17f2f262c3SMark Cave-Ayland const VMStateInfo vmstate_info_uint32; 18f2f262c3SMark Cave-Ayland const VMStateInfo vmstate_info_buffer; 19f2f262c3SMark Cave-Ayland 20f2f262c3SMark Cave-Ayland 21f2f262c3SMark Cave-Ayland static void test_fifo8_pop_bufptr_wrap(void) 22f2f262c3SMark Cave-Ayland { 23f2f262c3SMark Cave-Ayland Fifo8 fifo; 24f2f262c3SMark Cave-Ayland uint8_t data_in1[] = { 0x1, 0x2, 0x3, 0x4 }; 25e7217726SPhilippe Mathieu-Daudé uint8_t data_in2[] = { 0x5, 0x6, 0x7, 0x8, 0x9, 0xa }; 26f2f262c3SMark Cave-Ayland const uint8_t *buf; 27f2f262c3SMark Cave-Ayland uint32_t count; 28f2f262c3SMark Cave-Ayland 29f2f262c3SMark Cave-Ayland fifo8_create(&fifo, 8); 30*143897ebSPhilippe Mathieu-Daudé /* 31*143897ebSPhilippe Mathieu-Daudé * head --v-- tail used = 0 32*143897ebSPhilippe Mathieu-Daudé * FIFO: [ . . . . . . . . ] 33*143897ebSPhilippe Mathieu-Daudé */ 34f2f262c3SMark Cave-Ayland 35f2f262c3SMark Cave-Ayland fifo8_push_all(&fifo, data_in1, sizeof(data_in1)); 36*143897ebSPhilippe Mathieu-Daudé /* 37*143897ebSPhilippe Mathieu-Daudé * head --v ]-- tail used = 4 38*143897ebSPhilippe Mathieu-Daudé * FIFO: [ 1 2 3 4 . . . . ] 39*143897ebSPhilippe Mathieu-Daudé */ 40f2f262c3SMark Cave-Ayland buf = fifo8_pop_bufptr(&fifo, 2, &count); 41*143897ebSPhilippe Mathieu-Daudé /* 42*143897ebSPhilippe Mathieu-Daudé * head --v ]-- tail used = 2 43*143897ebSPhilippe Mathieu-Daudé * FIFO: [ 1 2 3 4 . . . . ] 44*143897ebSPhilippe Mathieu-Daudé * buf --^ count = 2 45*143897ebSPhilippe Mathieu-Daudé */ 46f2f262c3SMark Cave-Ayland g_assert(count == 2); 47f2f262c3SMark Cave-Ayland g_assert(buf[0] == 0x1 && buf[1] == 0x2); 48f2f262c3SMark Cave-Ayland 49f2f262c3SMark Cave-Ayland fifo8_push_all(&fifo, data_in2, sizeof(data_in2)); 50*143897ebSPhilippe Mathieu-Daudé /* 51*143897ebSPhilippe Mathieu-Daudé * tail --]v-- head used = 8 52*143897ebSPhilippe Mathieu-Daudé * FIFO: [ 9 a 3 4 5 6 7 8 ] 53*143897ebSPhilippe Mathieu-Daudé */ 54f2f262c3SMark Cave-Ayland buf = fifo8_pop_bufptr(&fifo, 8, &count); 55*143897ebSPhilippe Mathieu-Daudé /* 56*143897ebSPhilippe Mathieu-Daudé * head --v ]-- tail used = 2 57*143897ebSPhilippe Mathieu-Daudé * FIFO: [ 9 a 3 4 5 6 7 8 ] 58*143897ebSPhilippe Mathieu-Daudé * buf --^ count = 6 59*143897ebSPhilippe Mathieu-Daudé */ 60f2f262c3SMark Cave-Ayland g_assert(count == 6); 61f2f262c3SMark Cave-Ayland g_assert(buf[0] == 0x3 && buf[1] == 0x4 && buf[2] == 0x5 && 62f2f262c3SMark Cave-Ayland buf[3] == 0x6 && buf[4] == 0x7 && buf[5] == 0x8); 63f2f262c3SMark Cave-Ayland 64f2f262c3SMark Cave-Ayland g_assert(fifo8_num_used(&fifo) == 2); 65f2f262c3SMark Cave-Ayland fifo8_destroy(&fifo); 66f2f262c3SMark Cave-Ayland } 67f2f262c3SMark Cave-Ayland 68f2f262c3SMark Cave-Ayland static void test_fifo8_pop_bufptr(void) 69f2f262c3SMark Cave-Ayland { 70f2f262c3SMark Cave-Ayland Fifo8 fifo; 71f2f262c3SMark Cave-Ayland uint8_t data_in[] = { 0x1, 0x2, 0x3, 0x4 }; 72f2f262c3SMark Cave-Ayland const uint8_t *buf; 73f2f262c3SMark Cave-Ayland uint32_t count; 74f2f262c3SMark Cave-Ayland 75f2f262c3SMark Cave-Ayland fifo8_create(&fifo, 8); 76*143897ebSPhilippe Mathieu-Daudé /* 77*143897ebSPhilippe Mathieu-Daudé * head --v-- tail used = 0 78*143897ebSPhilippe Mathieu-Daudé * FIFO: [ . . . . . . . . ] 79*143897ebSPhilippe Mathieu-Daudé */ 80f2f262c3SMark Cave-Ayland 81f2f262c3SMark Cave-Ayland fifo8_push_all(&fifo, data_in, sizeof(data_in)); 82*143897ebSPhilippe Mathieu-Daudé /* 83*143897ebSPhilippe Mathieu-Daudé * head --v ]-- tail used = 4 84*143897ebSPhilippe Mathieu-Daudé * FIFO: [ 1 2 3 4 . . . . ] 85*143897ebSPhilippe Mathieu-Daudé */ 86f2f262c3SMark Cave-Ayland buf = fifo8_pop_bufptr(&fifo, 2, &count); 87*143897ebSPhilippe Mathieu-Daudé /* 88*143897ebSPhilippe Mathieu-Daudé * head --v ]-- tail used = 2 89*143897ebSPhilippe Mathieu-Daudé * FIFO: [ 1 2 3 4 . . . . ] 90*143897ebSPhilippe Mathieu-Daudé * buf --^ count = 2 91*143897ebSPhilippe Mathieu-Daudé */ 92f2f262c3SMark Cave-Ayland g_assert(count == 2); 93f2f262c3SMark Cave-Ayland g_assert(buf[0] == 0x1 && buf[1] == 0x2); 94f2f262c3SMark Cave-Ayland 95f2f262c3SMark Cave-Ayland g_assert(fifo8_num_used(&fifo) == 2); 96f2f262c3SMark Cave-Ayland fifo8_destroy(&fifo); 97f2f262c3SMark Cave-Ayland } 98f2f262c3SMark Cave-Ayland 99f2f262c3SMark Cave-Ayland static void test_fifo8_peek_bufptr_wrap(void) 100f2f262c3SMark Cave-Ayland { 101f2f262c3SMark Cave-Ayland Fifo8 fifo; 102f2f262c3SMark Cave-Ayland uint8_t data_in1[] = { 0x1, 0x2, 0x3, 0x4 }; 103e7217726SPhilippe Mathieu-Daudé uint8_t data_in2[] = { 0x5, 0x6, 0x7, 0x8, 0x9, 0xa }; 104f2f262c3SMark Cave-Ayland const uint8_t *buf; 105f2f262c3SMark Cave-Ayland uint32_t count; 106f2f262c3SMark Cave-Ayland 107f2f262c3SMark Cave-Ayland fifo8_create(&fifo, 8); 108*143897ebSPhilippe Mathieu-Daudé /* 109*143897ebSPhilippe Mathieu-Daudé * head --v-- tail used = 0 110*143897ebSPhilippe Mathieu-Daudé * FIFO: { . . . . . . . . } 111*143897ebSPhilippe Mathieu-Daudé */ 112f2f262c3SMark Cave-Ayland 113f2f262c3SMark Cave-Ayland fifo8_push_all(&fifo, data_in1, sizeof(data_in1)); 114*143897ebSPhilippe Mathieu-Daudé /* 115*143897ebSPhilippe Mathieu-Daudé * head --v ]-- tail used = 4 116*143897ebSPhilippe Mathieu-Daudé * FIFO: { 1 2 3 4 . . . . } 117*143897ebSPhilippe Mathieu-Daudé */ 118f2f262c3SMark Cave-Ayland buf = fifo8_peek_bufptr(&fifo, 2, &count); 119*143897ebSPhilippe Mathieu-Daudé /* 120*143897ebSPhilippe Mathieu-Daudé * head --v ]-- tail used = 4 121*143897ebSPhilippe Mathieu-Daudé * FIFO: { 1 2 3 4 . . . . } 122*143897ebSPhilippe Mathieu-Daudé * buf: [ 1 2 ] count = 2 123*143897ebSPhilippe Mathieu-Daudé */ 124f2f262c3SMark Cave-Ayland g_assert(count == 2); 125f2f262c3SMark Cave-Ayland g_assert(buf[0] == 0x1 && buf[1] == 0x2); 126f2f262c3SMark Cave-Ayland 127f2f262c3SMark Cave-Ayland buf = fifo8_pop_bufptr(&fifo, 2, &count); 128*143897ebSPhilippe Mathieu-Daudé /* 129*143897ebSPhilippe Mathieu-Daudé * head --v ]-- tail used = 2 130*143897ebSPhilippe Mathieu-Daudé * FIFO: { 1 2 3 4 . . . . } 131*143897ebSPhilippe Mathieu-Daudé * buf: [ 1 2 ] count = 2 132*143897ebSPhilippe Mathieu-Daudé */ 133f2f262c3SMark Cave-Ayland g_assert(count == 2); 134f2f262c3SMark Cave-Ayland g_assert(buf[0] == 0x1 && buf[1] == 0x2); 135f2f262c3SMark Cave-Ayland fifo8_push_all(&fifo, data_in2, sizeof(data_in2)); 136*143897ebSPhilippe Mathieu-Daudé /* 137*143897ebSPhilippe Mathieu-Daudé * tail ---]v-- head used = 8 138*143897ebSPhilippe Mathieu-Daudé * FIFO: { 9 a 3 4 5 6 7 8 } 139*143897ebSPhilippe Mathieu-Daudé */ 140f2f262c3SMark Cave-Ayland 141f2f262c3SMark Cave-Ayland buf = fifo8_peek_bufptr(&fifo, 8, &count); 142*143897ebSPhilippe Mathieu-Daudé /* 143*143897ebSPhilippe Mathieu-Daudé * tail --]v-- head used = 8 144*143897ebSPhilippe Mathieu-Daudé * FIFO: { 9 a 3 4 5 6 7 8 } 145*143897ebSPhilippe Mathieu-Daudé * buf: [ 3 4 5 6 7 8 ] count = 6 146*143897ebSPhilippe Mathieu-Daudé */ 147f2f262c3SMark Cave-Ayland g_assert(count == 6); 148f2f262c3SMark Cave-Ayland g_assert(buf[0] == 0x3 && buf[1] == 0x4 && buf[2] == 0x5 && 149f2f262c3SMark Cave-Ayland buf[3] == 0x6 && buf[4] == 0x7 && buf[5] == 0x8); 150f2f262c3SMark Cave-Ayland 151f2f262c3SMark Cave-Ayland g_assert(fifo8_num_used(&fifo) == 8); 152f2f262c3SMark Cave-Ayland fifo8_destroy(&fifo); 153f2f262c3SMark Cave-Ayland } 154f2f262c3SMark Cave-Ayland 155f2f262c3SMark Cave-Ayland static void test_fifo8_peek_bufptr(void) 156f2f262c3SMark Cave-Ayland { 157f2f262c3SMark Cave-Ayland Fifo8 fifo; 158f2f262c3SMark Cave-Ayland uint8_t data_in[] = { 0x1, 0x2, 0x3, 0x4 }; 159f2f262c3SMark Cave-Ayland const uint8_t *buf; 160f2f262c3SMark Cave-Ayland uint32_t count; 161f2f262c3SMark Cave-Ayland 162f2f262c3SMark Cave-Ayland fifo8_create(&fifo, 8); 163*143897ebSPhilippe Mathieu-Daudé /* 164*143897ebSPhilippe Mathieu-Daudé * head --v-- tail used = 0 165*143897ebSPhilippe Mathieu-Daudé * FIFO: { . . . . . . . . } 166*143897ebSPhilippe Mathieu-Daudé */ 167f2f262c3SMark Cave-Ayland 168f2f262c3SMark Cave-Ayland fifo8_push_all(&fifo, data_in, sizeof(data_in)); 169*143897ebSPhilippe Mathieu-Daudé /* 170*143897ebSPhilippe Mathieu-Daudé * head --v ]-- tail used = 4 171*143897ebSPhilippe Mathieu-Daudé * FIFO: { 1 2 3 4 . . . . } 172*143897ebSPhilippe Mathieu-Daudé */ 173f2f262c3SMark Cave-Ayland buf = fifo8_peek_bufptr(&fifo, 2, &count); 174*143897ebSPhilippe Mathieu-Daudé /* 175*143897ebSPhilippe Mathieu-Daudé * head --v ]-- tail used = 4 176*143897ebSPhilippe Mathieu-Daudé * FIFO: { 1 2 3 4 . . . . } 177*143897ebSPhilippe Mathieu-Daudé * buf: [ 1 2 ] count = 2 178*143897ebSPhilippe Mathieu-Daudé */ 179f2f262c3SMark Cave-Ayland g_assert(count == 2); 180f2f262c3SMark Cave-Ayland g_assert(buf[0] == 0x1 && buf[1] == 0x2); 181f2f262c3SMark Cave-Ayland 182f2f262c3SMark Cave-Ayland g_assert(fifo8_num_used(&fifo) == 4); 183f2f262c3SMark Cave-Ayland fifo8_destroy(&fifo); 184f2f262c3SMark Cave-Ayland } 185f2f262c3SMark Cave-Ayland 186f2f262c3SMark Cave-Ayland static void test_fifo8_pop_buf_wrap(void) 187f2f262c3SMark Cave-Ayland { 188f2f262c3SMark Cave-Ayland Fifo8 fifo; 189f2f262c3SMark Cave-Ayland uint8_t data_in1[] = { 0x1, 0x2, 0x3, 0x4 }; 190e7217726SPhilippe Mathieu-Daudé uint8_t data_in2[] = { 0x5, 0x6, 0x7, 0x8, 0x9, 0xa, 0xb, 0xc }; 191f2f262c3SMark Cave-Ayland uint8_t data_out[4]; 192f2f262c3SMark Cave-Ayland int count; 193f2f262c3SMark Cave-Ayland 194f2f262c3SMark Cave-Ayland fifo8_create(&fifo, 8); 195*143897ebSPhilippe Mathieu-Daudé /* 196*143897ebSPhilippe Mathieu-Daudé * head --v-- tail used = 0 197*143897ebSPhilippe Mathieu-Daudé * FIFO: { . . . . . . . . } 198*143897ebSPhilippe Mathieu-Daudé */ 199f2f262c3SMark Cave-Ayland 200f2f262c3SMark Cave-Ayland fifo8_push_all(&fifo, data_in1, sizeof(data_in1)); 201*143897ebSPhilippe Mathieu-Daudé /* 202*143897ebSPhilippe Mathieu-Daudé * head --v ]-- tail used = 4 203*143897ebSPhilippe Mathieu-Daudé * FIFO: { 1 2 3 4 . . . . } 204*143897ebSPhilippe Mathieu-Daudé */ 205f2f262c3SMark Cave-Ayland fifo8_pop_buf(&fifo, NULL, 4); 206*143897ebSPhilippe Mathieu-Daudé /* 207*143897ebSPhilippe Mathieu-Daudé * tail --]v-- head used = 0 208*143897ebSPhilippe Mathieu-Daudé * FIFO: [ 1 2 3 4 . . . . ] 209*143897ebSPhilippe Mathieu-Daudé */ 210f2f262c3SMark Cave-Ayland 211f2f262c3SMark Cave-Ayland fifo8_push_all(&fifo, data_in2, sizeof(data_in2)); 212*143897ebSPhilippe Mathieu-Daudé /* 213*143897ebSPhilippe Mathieu-Daudé * tail --]v-- head used = 8 214*143897ebSPhilippe Mathieu-Daudé * FIFO: { 9 a b c 5 6 7 8 } 215*143897ebSPhilippe Mathieu-Daudé */ 216f2f262c3SMark Cave-Ayland count = fifo8_pop_buf(&fifo, NULL, 4); 217*143897ebSPhilippe Mathieu-Daudé /* 218*143897ebSPhilippe Mathieu-Daudé * head --v ]-- tail used = 4 219*143897ebSPhilippe Mathieu-Daudé * FIFO: { 9 a b c 5 6 7 8 } 220*143897ebSPhilippe Mathieu-Daudé */ 221f2f262c3SMark Cave-Ayland g_assert(count == 4); 222f2f262c3SMark Cave-Ayland count = fifo8_pop_buf(&fifo, data_out, 4); 223*143897ebSPhilippe Mathieu-Daudé /* 224*143897ebSPhilippe Mathieu-Daudé * tail --]v-- head used = 0 225*143897ebSPhilippe Mathieu-Daudé * FIFO: { 9 a b c 5 6 7 8 } 226*143897ebSPhilippe Mathieu-Daudé */ 227f2f262c3SMark Cave-Ayland g_assert(count == 4); 228e7217726SPhilippe Mathieu-Daudé g_assert(data_out[0] == 0x9 && data_out[1] == 0xa && 229e7217726SPhilippe Mathieu-Daudé data_out[2] == 0xb && data_out[3] == 0xc); 230f2f262c3SMark Cave-Ayland 231f2f262c3SMark Cave-Ayland g_assert(fifo8_num_used(&fifo) == 0); 232f2f262c3SMark Cave-Ayland fifo8_destroy(&fifo); 233f2f262c3SMark Cave-Ayland } 234f2f262c3SMark Cave-Ayland 235f2f262c3SMark Cave-Ayland static void test_fifo8_pop_buf(void) 236f2f262c3SMark Cave-Ayland { 237f2f262c3SMark Cave-Ayland Fifo8 fifo; 238f2f262c3SMark Cave-Ayland uint8_t data_in[] = { 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8 }; 239f2f262c3SMark Cave-Ayland uint8_t data_out[] = { 0xff, 0xff, 0xff, 0xff }; 240f2f262c3SMark Cave-Ayland int count; 241f2f262c3SMark Cave-Ayland 242f2f262c3SMark Cave-Ayland fifo8_create(&fifo, 8); 243*143897ebSPhilippe Mathieu-Daudé /* 244*143897ebSPhilippe Mathieu-Daudé * head --v-- tail used = 0 245*143897ebSPhilippe Mathieu-Daudé * FIFO: { . . . . . . . . } 246*143897ebSPhilippe Mathieu-Daudé */ 247f2f262c3SMark Cave-Ayland 248f2f262c3SMark Cave-Ayland fifo8_push_all(&fifo, data_in, sizeof(data_in)); 249*143897ebSPhilippe Mathieu-Daudé /* 250*143897ebSPhilippe Mathieu-Daudé * head --v ]-- tail used = 4 251*143897ebSPhilippe Mathieu-Daudé * FIFO: { 1 2 3 4 . . . . } 252*143897ebSPhilippe Mathieu-Daudé */ 253f2f262c3SMark Cave-Ayland count = fifo8_pop_buf(&fifo, NULL, 4); 254*143897ebSPhilippe Mathieu-Daudé /* 255*143897ebSPhilippe Mathieu-Daudé * tail --]v-- head used = 0 256*143897ebSPhilippe Mathieu-Daudé * FIFO: { 1 2 3 4 . . . . } 257*143897ebSPhilippe Mathieu-Daudé */ 258f2f262c3SMark Cave-Ayland g_assert(count == 4); 259f2f262c3SMark Cave-Ayland count = fifo8_pop_buf(&fifo, data_out, 4); 260f2f262c3SMark Cave-Ayland g_assert(data_out[0] == 0x5 && data_out[1] == 0x6 && 261f2f262c3SMark Cave-Ayland data_out[2] == 0x7 && data_out[3] == 0x8); 262f2f262c3SMark Cave-Ayland 263f2f262c3SMark Cave-Ayland g_assert(fifo8_num_used(&fifo) == 0); 264f2f262c3SMark Cave-Ayland fifo8_destroy(&fifo); 265f2f262c3SMark Cave-Ayland } 266f2f262c3SMark Cave-Ayland 267f2f262c3SMark Cave-Ayland static void test_fifo8_peek_buf_wrap(void) 268f2f262c3SMark Cave-Ayland { 269f2f262c3SMark Cave-Ayland Fifo8 fifo; 270f2f262c3SMark Cave-Ayland uint8_t data_in1[] = { 0x1, 0x2, 0x3, 0x4 }; 271e7217726SPhilippe Mathieu-Daudé uint8_t data_in2[] = { 0x5, 0x6, 0x7, 0x8, 0x9, 0xa, 0xb, 0xc }; 27283dd07bbSPhilippe Mathieu-Daudé uint8_t data_out[8]; 273f2f262c3SMark Cave-Ayland int count; 274f2f262c3SMark Cave-Ayland 275f2f262c3SMark Cave-Ayland fifo8_create(&fifo, 8); 276*143897ebSPhilippe Mathieu-Daudé /* 277*143897ebSPhilippe Mathieu-Daudé * head --v-- tail used = 0 278*143897ebSPhilippe Mathieu-Daudé * FIFO: { . . . . . . . . } 279*143897ebSPhilippe Mathieu-Daudé */ 280f2f262c3SMark Cave-Ayland 281f2f262c3SMark Cave-Ayland fifo8_push_all(&fifo, data_in1, sizeof(data_in1)); 282*143897ebSPhilippe Mathieu-Daudé /* 283*143897ebSPhilippe Mathieu-Daudé * head --v ]-- tail used = 4 284*143897ebSPhilippe Mathieu-Daudé * FIFO: { 1 2 3 4 . . . . } 285*143897ebSPhilippe Mathieu-Daudé */ 286f2f262c3SMark Cave-Ayland fifo8_pop_buf(&fifo, NULL, 4); 287*143897ebSPhilippe Mathieu-Daudé /* 288*143897ebSPhilippe Mathieu-Daudé * tail --]v-- head used = 0 289*143897ebSPhilippe Mathieu-Daudé * FIFO: { 1 2 3 4 . . . . } 290*143897ebSPhilippe Mathieu-Daudé */ 291f2f262c3SMark Cave-Ayland 292f2f262c3SMark Cave-Ayland fifo8_push_all(&fifo, data_in2, sizeof(data_in2)); 293*143897ebSPhilippe Mathieu-Daudé /* 294*143897ebSPhilippe Mathieu-Daudé * tail --]v-- head used = 8 295*143897ebSPhilippe Mathieu-Daudé * FIFO: { 9 a b c 5 6 7 8 } 296*143897ebSPhilippe Mathieu-Daudé */ 297f2f262c3SMark Cave-Ayland count = fifo8_peek_buf(&fifo, NULL, 4); 298f2f262c3SMark Cave-Ayland g_assert(count == 4); 299f2f262c3SMark Cave-Ayland count = fifo8_peek_buf(&fifo, data_out, 4); 300*143897ebSPhilippe Mathieu-Daudé /* 301*143897ebSPhilippe Mathieu-Daudé * tail --]v-- head used = 8 302*143897ebSPhilippe Mathieu-Daudé * FIFO: { 9 a b c 5 6 7 8 } 303*143897ebSPhilippe Mathieu-Daudé * buf: [ 5 6 7 8 ] count = 4 304*143897ebSPhilippe Mathieu-Daudé */ 305f2f262c3SMark Cave-Ayland g_assert(count == 4); 306f2f262c3SMark Cave-Ayland g_assert(data_out[0] == 0x5 && data_out[1] == 0x6 && 307f2f262c3SMark Cave-Ayland data_out[2] == 0x7 && data_out[3] == 0x8); 308f2f262c3SMark Cave-Ayland 30983dd07bbSPhilippe Mathieu-Daudé count = fifo8_peek_buf(&fifo, data_out, 8); 310*143897ebSPhilippe Mathieu-Daudé /* 311*143897ebSPhilippe Mathieu-Daudé * tail --]v-- head used = 8 312*143897ebSPhilippe Mathieu-Daudé * FIFO: { 9 a b c 5 6 7 8 } 313*143897ebSPhilippe Mathieu-Daudé * buf: [ 5 6 7 8 9 a b c ] count = 8 314*143897ebSPhilippe Mathieu-Daudé */ 31583dd07bbSPhilippe Mathieu-Daudé g_assert(count == 8); 31683dd07bbSPhilippe Mathieu-Daudé g_assert(data_out[0] == 0x5 && data_out[1] == 0x6 && 31783dd07bbSPhilippe Mathieu-Daudé data_out[2] == 0x7 && data_out[3] == 0x8); 31883dd07bbSPhilippe Mathieu-Daudé g_assert(data_out[4] == 0x9 && data_out[5] == 0xa && 31983dd07bbSPhilippe Mathieu-Daudé data_out[6] == 0xb && data_out[7] == 0xc); 32083dd07bbSPhilippe Mathieu-Daudé 321f2f262c3SMark Cave-Ayland g_assert(fifo8_num_used(&fifo) == 8); 322f2f262c3SMark Cave-Ayland fifo8_destroy(&fifo); 323f2f262c3SMark Cave-Ayland } 324f2f262c3SMark Cave-Ayland 325f2f262c3SMark Cave-Ayland static void test_fifo8_peek_buf(void) 326f2f262c3SMark Cave-Ayland { 327f2f262c3SMark Cave-Ayland Fifo8 fifo; 328f2f262c3SMark Cave-Ayland uint8_t data_in[] = { 0x1, 0x2, 0x3, 0x4 }; 329f2f262c3SMark Cave-Ayland uint8_t data_out[] = { 0xff, 0xff, 0xff, 0xff }; 330f2f262c3SMark Cave-Ayland int count; 331f2f262c3SMark Cave-Ayland 332f2f262c3SMark Cave-Ayland fifo8_create(&fifo, 8); 333*143897ebSPhilippe Mathieu-Daudé /* 334*143897ebSPhilippe Mathieu-Daudé * head --v-- tail used = 0 335*143897ebSPhilippe Mathieu-Daudé * FIFO: { . . . . . . . . } 336*143897ebSPhilippe Mathieu-Daudé */ 337f2f262c3SMark Cave-Ayland 338f2f262c3SMark Cave-Ayland fifo8_push_all(&fifo, data_in, sizeof(data_in)); 339*143897ebSPhilippe Mathieu-Daudé /* 340*143897ebSPhilippe Mathieu-Daudé * head --v ]-- tail used = 4 341*143897ebSPhilippe Mathieu-Daudé * FIFO: { 1 2 3 4 . . . . } 342*143897ebSPhilippe Mathieu-Daudé */ 343f2f262c3SMark Cave-Ayland count = fifo8_peek_buf(&fifo, NULL, 4); 344f2f262c3SMark Cave-Ayland g_assert(count == 4); 345*143897ebSPhilippe Mathieu-Daudé 346f2f262c3SMark Cave-Ayland g_assert(data_out[0] == 0xff && data_out[1] == 0xff && 347f2f262c3SMark Cave-Ayland data_out[2] == 0xff && data_out[3] == 0xff); 348f2f262c3SMark Cave-Ayland count = fifo8_peek_buf(&fifo, data_out, 4); 349*143897ebSPhilippe Mathieu-Daudé /* 350*143897ebSPhilippe Mathieu-Daudé * head --v ]-- tail used = 4 351*143897ebSPhilippe Mathieu-Daudé * FIFO: { 1 2 3 4 . . . . } 352*143897ebSPhilippe Mathieu-Daudé * buf: [ 1 2 3 4 ] count = 4 353*143897ebSPhilippe Mathieu-Daudé */ 354f2f262c3SMark Cave-Ayland g_assert(count == 4); 355f2f262c3SMark Cave-Ayland g_assert(data_out[0] == 0x1 && data_out[1] == 0x2 && 356f2f262c3SMark Cave-Ayland data_out[2] == 0x3 && data_out[3] == 0x4); 357f2f262c3SMark Cave-Ayland 358f2f262c3SMark Cave-Ayland g_assert(fifo8_num_used(&fifo) == 4); 359f2f262c3SMark Cave-Ayland fifo8_destroy(&fifo); 360f2f262c3SMark Cave-Ayland } 361f2f262c3SMark Cave-Ayland 362f2f262c3SMark Cave-Ayland static void test_fifo8_peek(void) 363f2f262c3SMark Cave-Ayland { 364f2f262c3SMark Cave-Ayland Fifo8 fifo; 365f2f262c3SMark Cave-Ayland uint8_t c; 366f2f262c3SMark Cave-Ayland 367f2f262c3SMark Cave-Ayland fifo8_create(&fifo, 8); 368*143897ebSPhilippe Mathieu-Daudé /* 369*143897ebSPhilippe Mathieu-Daudé * head --v-- tail used = 0 370*143897ebSPhilippe Mathieu-Daudé * FIFO: { . . . . . . . . } 371*143897ebSPhilippe Mathieu-Daudé */ 372f2f262c3SMark Cave-Ayland fifo8_push(&fifo, 0x1); 373*143897ebSPhilippe Mathieu-Daudé /* 374*143897ebSPhilippe Mathieu-Daudé * head --v]-- tail used = 1 375*143897ebSPhilippe Mathieu-Daudé * FIFO: { 1 . . . . . . . } 376*143897ebSPhilippe Mathieu-Daudé */ 377f2f262c3SMark Cave-Ayland fifo8_push(&fifo, 0x2); 378*143897ebSPhilippe Mathieu-Daudé /* 379*143897ebSPhilippe Mathieu-Daudé * head --v ]-- tail used = 2 380*143897ebSPhilippe Mathieu-Daudé * FIFO: { 1 2 . . . . . . } 381*143897ebSPhilippe Mathieu-Daudé */ 382f2f262c3SMark Cave-Ayland 383f2f262c3SMark Cave-Ayland c = fifo8_peek(&fifo); 384f2f262c3SMark Cave-Ayland g_assert(c == 0x1); 385f2f262c3SMark Cave-Ayland fifo8_pop(&fifo); 386*143897ebSPhilippe Mathieu-Daudé /* 387*143897ebSPhilippe Mathieu-Daudé * head --v]-- tail used = 1 388*143897ebSPhilippe Mathieu-Daudé * FIFO: { 1 2 . . . . . . } 389*143897ebSPhilippe Mathieu-Daudé */ 390f2f262c3SMark Cave-Ayland c = fifo8_peek(&fifo); 391f2f262c3SMark Cave-Ayland g_assert(c == 0x2); 392f2f262c3SMark Cave-Ayland 393f2f262c3SMark Cave-Ayland g_assert(fifo8_num_used(&fifo) == 1); 394f2f262c3SMark Cave-Ayland fifo8_destroy(&fifo); 395f2f262c3SMark Cave-Ayland } 396f2f262c3SMark Cave-Ayland 397f2f262c3SMark Cave-Ayland static void test_fifo8_pushpop(void) 398f2f262c3SMark Cave-Ayland { 399f2f262c3SMark Cave-Ayland Fifo8 fifo; 400f2f262c3SMark Cave-Ayland uint8_t c; 401f2f262c3SMark Cave-Ayland 402f2f262c3SMark Cave-Ayland fifo8_create(&fifo, 8); 403*143897ebSPhilippe Mathieu-Daudé /* 404*143897ebSPhilippe Mathieu-Daudé * head --v-- tail used = 0 405*143897ebSPhilippe Mathieu-Daudé * FIFO: { . . . . . . . . } 406*143897ebSPhilippe Mathieu-Daudé */ 407f2f262c3SMark Cave-Ayland fifo8_push(&fifo, 0x1); 408*143897ebSPhilippe Mathieu-Daudé /* 409*143897ebSPhilippe Mathieu-Daudé * head --v]-- tail used = 1 410*143897ebSPhilippe Mathieu-Daudé * FIFO: { 1 . . . . . . . } 411*143897ebSPhilippe Mathieu-Daudé */ 412f2f262c3SMark Cave-Ayland fifo8_push(&fifo, 0x2); 413*143897ebSPhilippe Mathieu-Daudé /* 414*143897ebSPhilippe Mathieu-Daudé * head --v ]-- tail used = 2 415*143897ebSPhilippe Mathieu-Daudé * FIFO: { 1 2 . . . . . . } 416*143897ebSPhilippe Mathieu-Daudé */ 417f2f262c3SMark Cave-Ayland 418f2f262c3SMark Cave-Ayland c = fifo8_pop(&fifo); 419*143897ebSPhilippe Mathieu-Daudé /* 420*143897ebSPhilippe Mathieu-Daudé * head --v]-- tail used = 1 421*143897ebSPhilippe Mathieu-Daudé * FIFO: { 1 2 . . . . . . } 422*143897ebSPhilippe Mathieu-Daudé */ 423f2f262c3SMark Cave-Ayland g_assert(c == 0x1); 424f2f262c3SMark Cave-Ayland c = fifo8_pop(&fifo); 425*143897ebSPhilippe Mathieu-Daudé /* 426*143897ebSPhilippe Mathieu-Daudé * tail --]v-- head used = 0 427*143897ebSPhilippe Mathieu-Daudé * FIFO: { 1 2 . . . . . . } 428*143897ebSPhilippe Mathieu-Daudé */ 429f2f262c3SMark Cave-Ayland g_assert(c == 0x2); 430f2f262c3SMark Cave-Ayland 431f2f262c3SMark Cave-Ayland g_assert(fifo8_num_used(&fifo) == 0); 432f2f262c3SMark Cave-Ayland fifo8_destroy(&fifo); 433f2f262c3SMark Cave-Ayland } 434f2f262c3SMark Cave-Ayland 435f2f262c3SMark Cave-Ayland int main(int argc, char *argv[]) 436f2f262c3SMark Cave-Ayland { 437f2f262c3SMark Cave-Ayland g_test_init(&argc, &argv, NULL); 438f2f262c3SMark Cave-Ayland g_test_add_func("/fifo8/pushpop", test_fifo8_pushpop); 439f2f262c3SMark Cave-Ayland g_test_add_func("/fifo8/peek", test_fifo8_peek); 440f2f262c3SMark Cave-Ayland g_test_add_func("/fifo8/peek_buf", test_fifo8_peek_buf); 441f2f262c3SMark Cave-Ayland g_test_add_func("/fifo8/peek_buf_wrap", test_fifo8_peek_buf_wrap); 442f2f262c3SMark Cave-Ayland g_test_add_func("/fifo8/pop_buf", test_fifo8_pop_buf); 443f2f262c3SMark Cave-Ayland g_test_add_func("/fifo8/pop_buf_wrap", test_fifo8_pop_buf_wrap); 444f2f262c3SMark Cave-Ayland g_test_add_func("/fifo8/peek_bufptr", test_fifo8_peek_bufptr); 445f2f262c3SMark Cave-Ayland g_test_add_func("/fifo8/peek_bufptr_wrap", test_fifo8_peek_bufptr_wrap); 446f2f262c3SMark Cave-Ayland g_test_add_func("/fifo8/pop_bufptr", test_fifo8_pop_bufptr); 447f2f262c3SMark Cave-Ayland g_test_add_func("/fifo8/pop_bufptr_wrap", test_fifo8_pop_bufptr_wrap); 448f2f262c3SMark Cave-Ayland return g_test_run(); 449f2f262c3SMark Cave-Ayland } 450