Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
bytecodealliance
GitHub Repository: bytecodealliance/wasmtime
Path: blob/main/crates/c-api/tests/config.cc
1692 views
1
#include <gtest/gtest.h>
2
#include <wasmtime.hh>
3
#include <wasmtime/config.hh>
4
5
using namespace wasmtime;
6
7
TEST(PoolAllocationConfig, Smoke) {
8
PoolAllocationConfig config;
9
config.max_unused_warm_slots(1);
10
config.decommit_batch_size(2);
11
config.async_stack_keep_resident(3);
12
config.linear_memory_keep_resident(4);
13
config.table_keep_resident(5);
14
config.total_component_instances(6);
15
config.max_component_instance_size(7);
16
config.max_core_instances_per_component(8);
17
config.max_memories_per_component(9);
18
config.max_tables_per_component(10);
19
config.total_memories(11);
20
config.total_tables(12);
21
config.total_stacks(13);
22
config.total_core_instances(14);
23
config.max_core_instance_size(15);
24
config.max_tables_per_module(16);
25
config.table_elements(17);
26
config.max_memories_per_module(18);
27
config.max_memory_size(19);
28
config.total_gc_heaps(20);
29
30
PoolAllocationConfig config2 = std::move(config);
31
PoolAllocationConfig config3(std::move(config));
32
}
33
34
TEST(Config, Smoke) {
35
Config config;
36
config.debug_info(false);
37
config.epoch_interruption(false);
38
config.consume_fuel(false);
39
config.max_wasm_stack(100);
40
config.wasm_threads(false);
41
config.wasm_tail_call(false);
42
config.wasm_reference_types(false);
43
config.wasm_function_references(false);
44
config.wasm_gc(false);
45
config.wasm_simd(false);
46
config.wasm_relaxed_simd(false);
47
config.wasm_relaxed_simd_deterministic(false);
48
config.wasm_bulk_memory(false);
49
config.wasm_multi_value(false);
50
config.wasm_multi_memory(false);
51
config.wasm_memory64(false);
52
config.wasm_wide_arithmetic(false);
53
config.wasm_component_model(false);
54
config.strategy(Strategy::Auto);
55
config.cranelift_debug_verifier(false);
56
config.cranelift_opt_level(OptLevel::Speed);
57
config.cranelift_nan_canonicalization(false);
58
config.profiler(ProfilingStrategy::None);
59
config.memory_reservation(0);
60
config.memory_reservation_for_growth(0);
61
config.memory_guard_size(0);
62
config.memory_may_move(false);
63
config.memory_init_cow(false);
64
config.native_unwind_info(false);
65
config.macos_use_mach_ports(false);
66
config.cranelift_flag_enable("foo");
67
config.cranelift_flag_set("foo", "bar");
68
EXPECT_TRUE(config.cache_load_default());
69
EXPECT_FALSE(config.cache_load("nonexistent"));
70
71
PoolAllocationConfig pooling_config;
72
config.pooling_allocation_strategy(pooling_config);
73
74
Config config2 = std::move(config);
75
Config config3(std::move(config));
76
}
77
78
struct MyMemoryCreator {
79
struct Memory {
80
std::vector<uint8_t> storage;
81
82
uint8_t *get_memory(size_t *byte_size, size_t *byte_capacity) {
83
*byte_size = storage.size();
84
*byte_capacity = storage.capacity();
85
return &storage[0];
86
}
87
88
Result<std::monostate> grow_memory(size_t new_size) {
89
storage.resize(new_size, 0);
90
return std::monostate();
91
}
92
};
93
94
Result<Memory> new_memory(const MemoryType::Ref &ty, size_t minimum,
95
size_t maximum, size_t reserved_size_in_bytes,
96
size_t guard_size_in_bytes) {
97
EXPECT_EQ(guard_size_in_bytes, 0);
98
EXPECT_EQ(reserved_size_in_bytes, 0);
99
100
Memory mem;
101
mem.grow_memory(minimum).unwrap();
102
return mem;
103
}
104
};
105
106
TEST(Config, MemoryCreator) {
107
Config config;
108
config.memory_guard_size(0);
109
config.memory_reservation(0);
110
config.memory_reservation_for_growth(0);
111
config.host_memory_creator(MyMemoryCreator());
112
113
Engine engine(std::move(config));
114
Module m =
115
Module::compile(engine, "(module (memory (export \"x\") 1))").unwrap();
116
117
Store store(engine);
118
Instance i = Instance::create(store, m, {}).unwrap();
119
Memory mem = std::get<Memory>(*i.get(store, "x"));
120
{
121
auto data = mem.data(store);
122
EXPECT_EQ(data.size(), 65536);
123
for (auto &i : data) {
124
EXPECT_EQ(i, 0);
125
}
126
}
127
128
EXPECT_EQ(mem.grow(store, 1).unwrap(), 1);
129
130
{
131
auto data = mem.data(store);
132
EXPECT_EQ(data.size(), 65536 * 2);
133
for (auto &i : data) {
134
EXPECT_EQ(i, 0);
135
}
136
}
137
}
138
139