diff options
author | sanine <sanine.not@pm.me> | 2022-08-19 00:39:04 -0500 |
---|---|---|
committer | sanine <sanine.not@pm.me> | 2022-08-19 00:39:04 -0500 |
commit | ecde0c8110da1c1f94cce7f6a1fa9406d04eca69 (patch) | |
tree | 670e3d8706c652c1ffbf4f6406098af25a569c8b /src/gl/gl.test.c | |
parent | 275536b36657744d802866c060654e2b5cd5a5f8 (diff) |
add several buffer-related functions
Diffstat (limited to 'src/gl/gl.test.c')
-rw-r--r-- | src/gl/gl.test.c | 68 |
1 files changed, 66 insertions, 2 deletions
diff --git a/src/gl/gl.test.c b/src/gl/gl.test.c index 9bacbf9..aa24fd2 100644 --- a/src/gl/gl.test.c +++ b/src/gl/gl.test.c @@ -6,13 +6,17 @@ int mock_glfwInit_(void); -int mock_hs_throw_error_(lua_State *L, const char *str); +int mock_hs_throw_error_(lua_State *L, const char *str, ...); void mock_glfwTerminate_(); +void mock_glBufferData_(int, size_t, const void *, int); #define glfwInit mock_glfwInit_ #define hs_throw_error mock_hs_throw_error_ #define glfwTerminate mock_glfwTerminate_ +#undef glBufferData +#define glBufferData mock_glBufferData_ #include "gl/gl.c" +#undef glBufferData #undef glfwTerminate #undef hs_throw_error #undef glfwInit @@ -31,7 +35,7 @@ int mock_glfwInit_() lily_mock_t *mock_hs_throw_error = NULL; -int mock_hs_throw_error_(lua_State *L, const char *str) +int mock_hs_throw_error_(lua_State *L, const char *str, ...) { struct lily_mock_arg_t args[] = { { sizeof(const char *), &str } @@ -53,6 +57,24 @@ void mock_glfwTerminate_() } +lily_mock_t *mock_glBufferData = NULL; +void mock_glBufferData_(int target, size_t size, const void *data, int usage) +{ + struct lily_mock_arg_t args[] = { + { sizeof(int), &target }, + { sizeof(size_t), &size }, + { sizeof(int), &usage } + }; + lily_mock_store_call(mock_glBufferData, args); + + size_t count = size/sizeof(lua_Number); + lua_Number *numbers = data; + for (int i=0; i<count; i++) { + lily_store_value(mock_glBufferData, lua_Number, numbers[i]); + } +} + + /* ~~~~~~~~ suite ~~~~~~~~ */ void gl_init_succeeds() @@ -102,13 +124,55 @@ void gl_terminate_works() } +void gl_buffer_data_works() +{ + lily_mock_use(&mock_hs_throw_error); + lily_mock_use(&mock_glBufferData); + + lua_State *L = luaL_newstate(); + lua_pushcfunction(L, gl_buffer_data); + lua_pushinteger(L, GL_ARRAY_BUFFER); + hs_create_table(L, + hs_int_num(1, 22), + hs_int_num(2, 33), + hs_int_num(3, 44), + ); + lua_pushinteger(L, GL_STATIC_DRAW); + int err = hs_call(L, 3, 0); + lua_close(L); + + lily_assert_int_equal(err, 0); + lily_assert_int_equal(mock_glBufferData->n_calls, 1); + int target; size_t size; int usage; + struct lily_mock_arg_t args[] = { + { sizeof(int), &target }, + { sizeof(size_t), &size }, + { sizeof(int), &usage } + }; + lily_mock_get_call(mock_glBufferData, args, 0); + lily_assert_int_equal(target, GL_ARRAY_BUFFER); + lily_assert_int_equal(size, 3*sizeof(lua_Number)); + lily_assert_int_equal(usage, GL_STATIC_DRAW); + + lua_Number n; + lily_get_value(mock_glBufferData, lua_Number, &n); + lily_assert_float_equal(n, 22, 0.1); + lily_get_value(mock_glBufferData, lua_Number, &n); + lily_assert_float_equal(n, 33, 0.1); + lily_get_value(mock_glBufferData, lua_Number, &n); + lily_assert_float_equal(n, 44, 0.1); +} + + void suite_gl() { lily_run_test(gl_init_succeeds); lily_run_test(gl_init_fails); lily_run_test(gl_terminate_works); + lily_run_test(gl_buffer_data_works); lily_mock_destroy(mock_glfwInit); lily_mock_destroy(mock_hs_throw_error); lily_mock_destroy(mock_glfwTerminate); + lily_mock_destroy(mock_glBufferData); } |