test
parent
6751127608
commit
10fe1e28cf
|
@ -1,5 +1,5 @@
|
||||||
cmake_minimum_required(VERSION 3.25)
|
cmake_minimum_required(VERSION 3.25)
|
||||||
project(lilfbtf5 VERSION 0.1.28)
|
project(lilfbtf5 VERSION 0.1.29)
|
||||||
|
|
||||||
option(ENABLE_ADDRSAN "Enable the address sanitizer" OFF)
|
option(ENABLE_ADDRSAN "Enable the address sanitizer" OFF)
|
||||||
option(ENABLE_UBSAN "Enable the ub sanitizer" OFF)
|
option(ENABLE_UBSAN "Enable the ub sanitizer" OFF)
|
||||||
|
|
|
@ -124,6 +124,7 @@ namespace fb
|
||||||
associative_array<function_id, std::reference_wrapper<const func_t_call_t>> functions;
|
associative_array<function_id, std::reference_wrapper<const func_t_call_t>> functions;
|
||||||
// function id -> list of type_id for parameters where index 0 = arg 1
|
// function id -> list of type_id for parameters where index 0 = arg 1
|
||||||
associative_array<function_id, std::vector<type_id>, true> function_inputs;
|
associative_array<function_id, std::vector<type_id>, true> function_inputs;
|
||||||
|
associative_array<function_id, type_id> function_outputs;
|
||||||
associative_array<function_id, arg_c_t> function_argc;
|
associative_array<function_id, arg_c_t> function_argc;
|
||||||
|
|
||||||
blt::hashmap_t<function_id, std::reference_wrapper<const func_t_init_t>> function_initializer;
|
blt::hashmap_t<function_id, std::reference_wrapper<const func_t_init_t>> function_initializer;
|
||||||
|
|
12
src/tree.cpp
12
src/tree.cpp
|
@ -179,11 +179,15 @@ namespace fb
|
||||||
|
|
||||||
detail::node_t* tree_t::allocate_non_terminal_restricted(detail::node_helper_t details, type_id type)
|
detail::node_t* tree_t::allocate_non_terminal_restricted(detail::node_helper_t details, type_id type)
|
||||||
{
|
{
|
||||||
const auto& non_terminals = details.types.get_non_terminals(type);
|
|
||||||
function_id selection = 0;
|
function_id selection = 0;
|
||||||
|
do {
|
||||||
|
const auto& non_terminals = details.types.get_non_terminals(type);
|
||||||
|
selection = details.engine.random_long(0, non_terminals.size() - 1);
|
||||||
|
auto& sel_v = details.types.get_function_allowed_arguments(selection);
|
||||||
|
// if it does not accept the type we are
|
||||||
|
if (std::find(sel_v.begin(), sel_v.end(), type) == sel_v.end())
|
||||||
|
break;
|
||||||
|
} while(true);
|
||||||
|
|
||||||
func_t func(details.types.get_function_argc(selection), details.types.get_function(selection), type, selection);
|
func_t func(details.types.get_function_argc(selection), details.types.get_function(selection), type, selection);
|
||||||
if (const auto& func_init = details.types.get_function_initializer(selection))
|
if (const auto& func_init = details.types.get_function_initializer(selection))
|
||||||
|
|
Loading…
Reference in New Issue