really broken
parent
d432c22395
commit
232d5fe4cd
|
@ -117,17 +117,52 @@ namespace fb
|
||||||
for (blt::i32 i = 0; i < arg_c[static_cast<int>(info.back().type)]; i++)
|
for (blt::i32 i = 0; i < arg_c[static_cast<int>(info.back().type)]; i++)
|
||||||
{
|
{
|
||||||
if (depth >= size)
|
if (depth >= size)
|
||||||
|
{
|
||||||
break;
|
break;
|
||||||
if (choice())
|
} else if (depth == size - 1)
|
||||||
stack.emplace(construct_info{random_type()}, depth + 1);
|
{
|
||||||
else
|
stack.emplace(construct_info{type_t::VALUE}, depth + 1);
|
||||||
stack.emplace(construct_info{random_type_sub()}, depth + 1);
|
} else
|
||||||
|
{
|
||||||
|
if (choice())
|
||||||
|
stack.emplace(construct_info{random_type()}, depth + 1);
|
||||||
|
else
|
||||||
|
stack.emplace(construct_info{random_type_sub()}, depth + 1);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return info;
|
return info;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void type_stats(const std::vector<construct_info>& info)
|
||||||
|
{
|
||||||
|
blt::size_t add = 0;
|
||||||
|
blt::size_t sub = 0;
|
||||||
|
blt::size_t mul = 0;
|
||||||
|
blt::size_t val = 0;
|
||||||
|
|
||||||
|
for (const auto& v : info)
|
||||||
|
{
|
||||||
|
switch (v.type)
|
||||||
|
{
|
||||||
|
case type_t::ADD:
|
||||||
|
add++;
|
||||||
|
break;
|
||||||
|
case type_t::SUB:
|
||||||
|
sub++;
|
||||||
|
break;
|
||||||
|
case type_t::MUL:
|
||||||
|
mul++;
|
||||||
|
break;
|
||||||
|
case type_t::VALUE:
|
||||||
|
val++;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
BLT_INFO("We have %ld adds, %ld subs, %ld mul, %ld val", add, sub, mul, val);
|
||||||
|
}
|
||||||
|
|
||||||
class tree1
|
class tree1
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
@ -136,7 +171,7 @@ namespace fb
|
||||||
struct node_t
|
struct node_t
|
||||||
{
|
{
|
||||||
blt::bump_allocator<true>& alloc;
|
blt::bump_allocator<true>& alloc;
|
||||||
std::array<node_t*, 2> children{};
|
std::array<node_t*, 2> children{nullptr};
|
||||||
double value = 0;
|
double value = 0;
|
||||||
blt::i32 argc;
|
blt::i32 argc;
|
||||||
type_t type;
|
type_t type;
|
||||||
|
@ -167,6 +202,7 @@ namespace fb
|
||||||
{
|
{
|
||||||
std::stack<node_t*> nodes;
|
std::stack<node_t*> nodes;
|
||||||
std::stack<node_t*> node_stack;
|
std::stack<node_t*> node_stack;
|
||||||
|
blt::size_t evals = 0;
|
||||||
|
|
||||||
nodes.push(this);
|
nodes.push(this);
|
||||||
|
|
||||||
|
@ -183,8 +219,10 @@ namespace fb
|
||||||
{
|
{
|
||||||
node_stack.top()->evaluate();
|
node_stack.top()->evaluate();
|
||||||
BLT_DEBUG(node_stack.top()->value);
|
BLT_DEBUG(node_stack.top()->value);
|
||||||
|
evals++;
|
||||||
node_stack.pop();
|
node_stack.pop();
|
||||||
}
|
}
|
||||||
|
BLT_INFO("Evaluated %ld times", evals);
|
||||||
return value;
|
return value;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -381,6 +419,8 @@ namespace fb
|
||||||
void funny()
|
void funny()
|
||||||
{
|
{
|
||||||
auto info = create_info(17);
|
auto info = create_info(17);
|
||||||
|
type_stats(info);
|
||||||
|
|
||||||
tree1 love;
|
tree1 love;
|
||||||
love.create(info);
|
love.create(info);
|
||||||
BLT_TRACE(love.evaluate());
|
BLT_TRACE(love.evaluate());
|
||||||
|
|
Loading…
Reference in New Issue