#include #include "wasmer.h" #include #include #include int main() { wasmer_memory_t *memory = NULL; wasmer_limits_t descriptor = { .min = 10, .max = { .has_some = true, .some = 15, }, }; wasmer_result_t memory_result = wasmer_memory_new(&memory, descriptor); printf("Memory result: %d\n", memory_result); assert(memory_result == WASMER_OK); uint32_t len = wasmer_memory_length(memory); printf("Memory pages length: %d\n", len); assert(len == 10); wasmer_result_t grow_result = wasmer_memory_grow(memory, 2); assert(grow_result == WASMER_OK); uint32_t new_len = wasmer_memory_length(memory); printf("Memory pages length: %d\n", new_len); assert(new_len == 12); uint32_t bytes_len = wasmer_memory_data_length(memory); printf("Memory bytes length: %d\n", bytes_len); assert(bytes_len == 12 * 65536); // Err, grow beyond max wasmer_result_t grow_result2 = wasmer_memory_grow(memory, 10); assert(grow_result2 == WASMER_ERROR); int error_len = wasmer_last_error_length(); char *error_str = malloc(error_len); wasmer_last_error_message(error_str, error_len); printf("Error str: `%s`\n", error_str); assert(0 == strcmp(error_str, "The memory could not grow: current size 12 pages, requested increase: 10 pages")); free(error_str); wasmer_memory_t *bad_memory = NULL; wasmer_limits_t bad_descriptor; bad_descriptor.min = 15; wasmer_limit_option_t max2; max2.has_some = true; max2.some = 10; bad_descriptor.max = max2; wasmer_result_t bad_memory_result = wasmer_memory_new(&bad_memory, bad_descriptor); printf("Bad memory result: %d\n", bad_memory_result); assert(bad_memory_result == WASMER_ERROR); int error_len2 = wasmer_last_error_length(); char *error_str2 = malloc(error_len2); wasmer_last_error_message(error_str2, error_len2); printf("Error str 2: `%s`\n", error_str2); assert(0 == strcmp(error_str2, "The memory is invalid because the maximum (10 pages) is less than the minimum (15 pages)")); free(error_str2); printf("Destroy memory\n"); wasmer_memory_destroy(memory); return 0; }