meow
parent
3d82f69370
commit
46ceaf49dd
|
@ -1,5 +1,5 @@
|
||||||
cmake_minimum_required(VERSION 3.25)
|
cmake_minimum_required(VERSION 3.25)
|
||||||
project(blt-gp VERSION 0.1.17)
|
project(blt-gp VERSION 0.1.18)
|
||||||
|
|
||||||
include(CTest)
|
include(CTest)
|
||||||
|
|
||||||
|
|
|
@ -319,9 +319,9 @@ namespace blt::gp::detail
|
||||||
explicit operator_storage_test(blt::gp::operator_builder<context>& ops): ops(ops)
|
explicit operator_storage_test(blt::gp::operator_builder<context>& ops): ops(ops)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
inline blt::gp::detail::callable_t& operator[](blt::size_t index)
|
inline blt::gp::detail::operator_func_t& operator[](blt::size_t index)
|
||||||
{
|
{
|
||||||
return ops.storage.operators[index].function;
|
return ops.storage.operators[index].func;
|
||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
@ -447,24 +447,21 @@ int main()
|
||||||
//BLT_TRACE(blt::type_string<blt::gp::detail::remove_cv_ref<decltype(silly_op_3)::first::type>>());
|
//BLT_TRACE(blt::type_string<blt::gp::detail::remove_cv_ref<decltype(silly_op_3)::first::type>>());
|
||||||
//BLT_TRACE("Same types? %s", (std::is_same_v<context, blt::gp::detail::remove_cv_ref<decltype(silly_op_3)::first::type>>) ? "true" : "false");
|
//BLT_TRACE("Same types? %s", (std::is_same_v<context, blt::gp::detail::remove_cv_ref<decltype(silly_op_3)::first::type>>) ? "true" : "false");
|
||||||
|
|
||||||
ops.add_operator(silly_op_3);
|
ops.build(silly_op_3, silly_op_4, silly_op_2);
|
||||||
ops.add_operator(silly_op_4);
|
|
||||||
ops.add_operator(silly_op_2);
|
|
||||||
|
|
||||||
blt::gp::detail::operator_storage_test de(ops);
|
blt::gp::detail::operator_storage_test de(ops);
|
||||||
|
|
||||||
context hello{5, 10};
|
context hello{5, 10};
|
||||||
|
|
||||||
alloc.push(1.153f);
|
alloc.push(1.153f);
|
||||||
de[0](static_cast<void*>(&hello), alloc, alloc, nullptr);
|
de[0](static_cast<void*>(&hello), alloc, alloc);
|
||||||
BLT_TRACE("first value: %f", alloc.pop<float>());
|
BLT_TRACE("first value: %f", alloc.pop<float>());
|
||||||
|
|
||||||
de[1](static_cast<void*>(&hello), alloc, alloc, nullptr);
|
de[1](static_cast<void*>(&hello), alloc, alloc);
|
||||||
BLT_TRACE("second value: %f", alloc.pop<float>());
|
BLT_TRACE("second value: %f", alloc.pop<float>());
|
||||||
|
|
||||||
alloc.push(1.0f);
|
alloc.push(1.0f);
|
||||||
alloc.push(52.213f);
|
alloc.push(52.213f);
|
||||||
de[2](static_cast<void*>(&hello), alloc, alloc, nullptr);
|
de[2](static_cast<void*>(&hello), alloc, alloc);
|
||||||
BLT_TRACE("third value: %f", alloc.pop<float>());
|
BLT_TRACE("third value: %f", alloc.pop<float>());
|
||||||
|
|
||||||
//auto* pointer = static_cast<void*>(head->metadata.offset);
|
//auto* pointer = static_cast<void*>(head->metadata.offset);
|
||||||
|
|
|
@ -32,18 +32,21 @@ blt::gp::operation_t add([](float a, float b) {
|
||||||
});
|
});
|
||||||
blt::gp::operation_t sub([](float a, float b) {
|
blt::gp::operation_t sub([](float a, float b) {
|
||||||
BLT_TRACE("a: %f - b: %f = %f", a, b, a - b);
|
BLT_TRACE("a: %f - b: %f = %f", a, b, a - b);
|
||||||
return a - b; });
|
return a - b;
|
||||||
|
});
|
||||||
blt::gp::operation_t mul([](float a, float b) {
|
blt::gp::operation_t mul([](float a, float b) {
|
||||||
BLT_TRACE("a: %f * b: %f = %f", a, b, a * b);
|
BLT_TRACE("a: %f * b: %f = %f", a, b, a * b);
|
||||||
return a * b; });
|
return a * b;
|
||||||
|
});
|
||||||
blt::gp::operation_t pro_div([](float a, float b) {
|
blt::gp::operation_t pro_div([](float a, float b) {
|
||||||
BLT_TRACE("a: %f / b: %f = %f", a, b, (b == 0 ? 0.0f : a / b));
|
BLT_TRACE("a: %f / b: %f = %f", a, b, (b == 0 ? 0.0f : a / b));
|
||||||
return b == 0 ? 0.0f : a / b; });
|
return b == 0 ? 0.0f : a / b;
|
||||||
blt::gp::operation_t lit([]() {
|
});
|
||||||
|
auto lit = blt::gp::operation_t([]() {
|
||||||
//static std::uniform_real_distribution<float> dist(-32000, 32000);
|
//static std::uniform_real_distribution<float> dist(-32000, 32000);
|
||||||
// static std::uniform_real_distribution<float> dist(0.0f, 10.0f);
|
// static std::uniform_real_distribution<float> dist(0.0f, 10.0f);
|
||||||
return program.get_random().get_float(0.0f, 10.0f);
|
return program.get_random().get_float(0.0f, 10.0f);
|
||||||
});
|
}).set_ephemeral();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This is a test using a type with blt::gp
|
* This is a test using a type with blt::gp
|
||||||
|
@ -53,18 +56,13 @@ int main()
|
||||||
type_system.register_type<float>();
|
type_system.register_type<float>();
|
||||||
|
|
||||||
blt::gp::operator_builder silly{type_system};
|
blt::gp::operator_builder silly{type_system};
|
||||||
silly.add_operator(add);
|
|
||||||
silly.add_operator(sub);
|
|
||||||
silly.add_operator(mul);
|
|
||||||
silly.add_operator(pro_div);
|
|
||||||
silly.add_operator(lit, true);
|
|
||||||
|
|
||||||
program.set_operations(silly.build());
|
program.set_operations(silly.build(add, sub, mul, pro_div, lit));
|
||||||
|
|
||||||
blt::gp::grow_generator_t grow;
|
blt::gp::grow_generator_t grow;
|
||||||
auto tree = grow.generate(blt::gp::generator_arguments{program, type_system.get_type<float>().id(), 3, 7});
|
auto tree = grow.generate(blt::gp::generator_arguments{program, type_system.get_type<float>().id(), 3, 7});
|
||||||
|
|
||||||
auto value = tree.get_evaluation_value<float>(nullptr);
|
auto value = tree.get_evaluation_value<float>(nullptr, program.get_eval_func());
|
||||||
|
|
||||||
BLT_TRACE(value);
|
BLT_TRACE(value);
|
||||||
|
|
||||||
|
|
|
@ -72,13 +72,13 @@ blt::gp::operation_t basic_sub([](float a, float b, bool choice) {
|
||||||
}
|
}
|
||||||
}, "sub");
|
}, "sub");
|
||||||
|
|
||||||
blt::gp::operation_t basic_lit_f([]() {
|
auto basic_lit_f= blt::gp::operation_t([]() {
|
||||||
return b_rand.choice() ? 5.0f : 10.0f;
|
return b_rand.choice() ? 5.0f : 10.0f;
|
||||||
});
|
}).set_ephemeral();
|
||||||
|
|
||||||
blt::gp::operation_t basic_lit_b([]() {
|
auto basic_lit_b = blt::gp::operation_t([]() {
|
||||||
return false;
|
return false;
|
||||||
});
|
}).set_ephemeral();
|
||||||
|
|
||||||
void basic_test()
|
void basic_test()
|
||||||
{
|
{
|
||||||
|
@ -86,18 +86,14 @@ void basic_test()
|
||||||
|
|
||||||
blt::gp::operator_builder<context> builder{type_system};
|
blt::gp::operator_builder<context> builder{type_system};
|
||||||
|
|
||||||
builder.add_operator(basic_sub);
|
program.set_operations(builder.build(basic_sub, basic_lit_f, basic_lit_b));
|
||||||
builder.add_operator(basic_lit_f, true);
|
|
||||||
builder.add_operator(basic_lit_b, true);
|
|
||||||
|
|
||||||
program.set_operations(builder.build());
|
|
||||||
|
|
||||||
blt::gp::grow_generator_t gen;
|
blt::gp::grow_generator_t gen;
|
||||||
blt::gp::generator_arguments args{program, type_system.get_type<float>().id(), 1, 1};
|
blt::gp::generator_arguments args{program, type_system.get_type<float>().id(), 1, 1};
|
||||||
auto tree = gen.generate(args);
|
auto tree = gen.generate(args);
|
||||||
|
|
||||||
context ctx{&program};
|
context ctx{&program};
|
||||||
auto result = tree.get_evaluation_value<float>(&ctx);
|
auto result = tree.get_evaluation_value<float>(&ctx, program.get_eval_func());
|
||||||
BLT_TRACE(result);
|
BLT_TRACE(result);
|
||||||
BLT_ASSERT(result == -5.0f || result == 5.0f || result == 0.0f);
|
BLT_ASSERT(result == -5.0f || result == 5.0f || result == 0.0f);
|
||||||
tree.print(program, std::cout, true, true);
|
tree.print(program, std::cout, true, true);
|
||||||
|
|
|
@ -302,7 +302,7 @@ void test_basic()
|
||||||
stack.push(50.0f);
|
stack.push(50.0f);
|
||||||
stack.push(10.0f);
|
stack.push(10.0f);
|
||||||
BLT_TRACE_STREAM << stack.size() << "\n";
|
BLT_TRACE_STREAM << stack.size() << "\n";
|
||||||
basic_2.make_callable<blt::gp::detail::empty_t>()(nullptr, stack, stack, nullptr);
|
basic_2.make_callable<blt::gp::detail::empty_t>()(nullptr, stack, stack);
|
||||||
BLT_TRACE_STREAM << stack.size() << "\n";
|
BLT_TRACE_STREAM << stack.size() << "\n";
|
||||||
auto val = stack.pop<float>();
|
auto val = stack.pop<float>();
|
||||||
RUN_TEST(val != 60.000000f, stack, "Basic 2 Test Passed", "Basic 2 Test Failed. Unexpected value produced '%lf'", val);
|
RUN_TEST(val != 60.000000f, stack, "Basic 2 Test Passed", "Basic 2 Test Failed. Unexpected value produced '%lf'", val);
|
||||||
|
@ -318,7 +318,7 @@ void test_basic()
|
||||||
auto size = stack.size();
|
auto size = stack.size();
|
||||||
BLT_TRACE_STREAM << size << "\n";
|
BLT_TRACE_STREAM << size << "\n";
|
||||||
//BLT_ASSERT(size.blocks > 1 && "Stack doesn't have more than one block!");
|
//BLT_ASSERT(size.blocks > 1 && "Stack doesn't have more than one block!");
|
||||||
basic_2.make_callable<blt::gp::detail::empty_t>()(nullptr, stack, stack, nullptr);
|
basic_2.make_callable<blt::gp::detail::empty_t>()(nullptr, stack, stack);
|
||||||
BLT_TRACE_STREAM << stack.size() << "\n";
|
BLT_TRACE_STREAM << stack.size() << "\n";
|
||||||
auto val = stack.pop<float>();
|
auto val = stack.pop<float>();
|
||||||
stack.pop<std::array<blt::u8, 4096 - sizeof(float)>>();
|
stack.pop<std::array<blt::u8, 4096 - sizeof(float)>>();
|
||||||
|
@ -339,7 +339,7 @@ void test_mixed()
|
||||||
stack.push(false);
|
stack.push(false);
|
||||||
|
|
||||||
BLT_TRACE_STREAM << stack.size() << "\n";
|
BLT_TRACE_STREAM << stack.size() << "\n";
|
||||||
basic_mixed_4.make_callable<blt::gp::detail::empty_t>()(nullptr, stack, stack, nullptr);
|
basic_mixed_4.make_callable<blt::gp::detail::empty_t>()(nullptr, stack, stack);
|
||||||
BLT_TRACE_STREAM << stack.size() << "\n";
|
BLT_TRACE_STREAM << stack.size() << "\n";
|
||||||
auto val = stack.pop<float>();
|
auto val = stack.pop<float>();
|
||||||
RUN_TEST(val != 50.000000f, stack, "Mixed 4 Test Passed", "Mixed 4 Test Failed. Unexpected value produced '%lf'", val);
|
RUN_TEST(val != 50.000000f, stack, "Mixed 4 Test Passed", "Mixed 4 Test Failed. Unexpected value produced '%lf'", val);
|
||||||
|
@ -357,7 +357,7 @@ void test_mixed()
|
||||||
auto size = stack.size();
|
auto size = stack.size();
|
||||||
BLT_TRACE_STREAM << size << "\n";
|
BLT_TRACE_STREAM << size << "\n";
|
||||||
// BLT_ASSERT(size.blocks > 1 && "Stack doesn't have more than one block!");
|
// BLT_ASSERT(size.blocks > 1 && "Stack doesn't have more than one block!");
|
||||||
basic_mixed_4.make_callable<blt::gp::detail::empty_t>()(nullptr, stack, stack, nullptr);
|
basic_mixed_4.make_callable<blt::gp::detail::empty_t>()(nullptr, stack, stack);
|
||||||
BLT_TRACE_STREAM << stack.size() << "\n";
|
BLT_TRACE_STREAM << stack.size() << "\n";
|
||||||
auto val = stack.pop<float>();
|
auto val = stack.pop<float>();
|
||||||
stack.pop<std::array<blt::u8, 4096 - sizeof(float)>>();
|
stack.pop<std::array<blt::u8, 4096 - sizeof(float)>>();
|
||||||
|
@ -377,7 +377,7 @@ void test_large_256()
|
||||||
stack.push(69.420f);
|
stack.push(69.420f);
|
||||||
|
|
||||||
BLT_TRACE_STREAM << stack.size() << "\n";
|
BLT_TRACE_STREAM << stack.size() << "\n";
|
||||||
large_256_basic_3.make_callable<blt::gp::detail::empty_t>()(nullptr, stack, stack, nullptr);
|
large_256_basic_3.make_callable<blt::gp::detail::empty_t>()(nullptr, stack, stack);
|
||||||
BLT_TRACE_STREAM << stack.size() << "\n";
|
BLT_TRACE_STREAM << stack.size() << "\n";
|
||||||
auto val = stack.pop<large_256>();
|
auto val = stack.pop<large_256>();
|
||||||
RUN_TEST(!compare(val, base_256), stack, "Large 256 3 Test Passed", "Large 256 3 Test Failed. Unexpected value produced '%lf'", val);
|
RUN_TEST(!compare(val, base_256), stack, "Large 256 3 Test Passed", "Large 256 3 Test Failed. Unexpected value produced '%lf'", val);
|
||||||
|
@ -394,7 +394,7 @@ void test_large_256()
|
||||||
auto size = stack.size();
|
auto size = stack.size();
|
||||||
BLT_TRACE_STREAM << size << "\n";
|
BLT_TRACE_STREAM << size << "\n";
|
||||||
// BLT_ASSERT(size.blocks > 1 && "Stack doesn't have more than one block!");
|
// BLT_ASSERT(size.blocks > 1 && "Stack doesn't have more than one block!");
|
||||||
large_256_basic_3.make_callable<blt::gp::detail::empty_t>()(nullptr, stack, stack, nullptr);
|
large_256_basic_3.make_callable<blt::gp::detail::empty_t>()(nullptr, stack, stack);
|
||||||
BLT_TRACE_STREAM << stack.size() << "\n";
|
BLT_TRACE_STREAM << stack.size() << "\n";
|
||||||
auto val = stack.pop<large_256>();
|
auto val = stack.pop<large_256>();
|
||||||
stack.pop<std::array<blt::u8, 4096 - sizeof(large_256)>>();
|
stack.pop<std::array<blt::u8, 4096 - sizeof(large_256)>>();
|
||||||
|
@ -413,7 +413,7 @@ void test_large_4096()
|
||||||
stack.push(33.0f);
|
stack.push(33.0f);
|
||||||
stack.push(true);
|
stack.push(true);
|
||||||
BLT_TRACE_STREAM << stack.size() << "\n";
|
BLT_TRACE_STREAM << stack.size() << "\n";
|
||||||
large_4096_basic_3b.make_callable<blt::gp::detail::empty_t>()(nullptr, stack, stack, nullptr);
|
large_4096_basic_3b.make_callable<blt::gp::detail::empty_t>()(nullptr, stack, stack);
|
||||||
BLT_TRACE_STREAM << stack.size() << "\n";
|
BLT_TRACE_STREAM << stack.size() << "\n";
|
||||||
auto val = stack.pop<large_4096>();
|
auto val = stack.pop<large_4096>();
|
||||||
RUN_TEST(!compare(val, base_4096), stack, "Large 4096 3 Test Passed", "Large 4096 3 Test Failed. Unexpected value produced '%lf'", val);
|
RUN_TEST(!compare(val, base_4096), stack, "Large 4096 3 Test Passed", "Large 4096 3 Test Failed. Unexpected value produced '%lf'", val);
|
||||||
|
@ -429,7 +429,7 @@ void test_large_4096()
|
||||||
auto size = stack.size();
|
auto size = stack.size();
|
||||||
BLT_TRACE_STREAM << size << "\n";
|
BLT_TRACE_STREAM << size << "\n";
|
||||||
// BLT_ASSERT(size.blocks > 1 && "Stack doesn't have more than one block!");
|
// BLT_ASSERT(size.blocks > 1 && "Stack doesn't have more than one block!");
|
||||||
large_4096_basic_3b.make_callable<blt::gp::detail::empty_t>()(nullptr, stack, stack, nullptr);
|
large_4096_basic_3b.make_callable<blt::gp::detail::empty_t>()(nullptr, stack, stack);
|
||||||
BLT_TRACE_STREAM << stack.size() << "\n";
|
BLT_TRACE_STREAM << stack.size() << "\n";
|
||||||
auto val = stack.pop<large_4096>();
|
auto val = stack.pop<large_4096>();
|
||||||
RUN_TEST(!compare(val, base_4096), stack, "Large 4096 3 Boundary Test Passed", "Large 4096 3 Test Failed. Unexpected value produced '%lf'", val);
|
RUN_TEST(!compare(val, base_4096), stack, "Large 4096 3 Boundary Test Passed", "Large 4096 3 Test Failed. Unexpected value produced '%lf'", val);
|
||||||
|
@ -447,7 +447,7 @@ void test_large_18290()
|
||||||
stack.push(-2543.0f);
|
stack.push(-2543.0f);
|
||||||
stack.push(true);
|
stack.push(true);
|
||||||
BLT_TRACE_STREAM << stack.size() << "\n";
|
BLT_TRACE_STREAM << stack.size() << "\n";
|
||||||
large_18290_basic_3b.make_callable<blt::gp::detail::empty_t>()(nullptr, stack, stack, nullptr);
|
large_18290_basic_3b.make_callable<blt::gp::detail::empty_t>()(nullptr, stack, stack);
|
||||||
BLT_TRACE_STREAM << stack.size() << "\n";
|
BLT_TRACE_STREAM << stack.size() << "\n";
|
||||||
auto val = stack.pop<large_18290>();
|
auto val = stack.pop<large_18290>();
|
||||||
RUN_TEST(!compare(val, base_18290), stack, "Large 18290 3 Test Passed", "Large 4096 3 Test Failed. Unexpected value produced '%lf'", val);
|
RUN_TEST(!compare(val, base_18290), stack, "Large 18290 3 Test Passed", "Large 4096 3 Test Failed. Unexpected value produced '%lf'", val);
|
||||||
|
@ -464,7 +464,7 @@ void test_large_18290()
|
||||||
auto size = stack.size();
|
auto size = stack.size();
|
||||||
BLT_TRACE_STREAM << size << "\n";
|
BLT_TRACE_STREAM << size << "\n";
|
||||||
// BLT_ASSERT(size.blocks > 1 && "Stack doesn't have more than one block!");
|
// BLT_ASSERT(size.blocks > 1 && "Stack doesn't have more than one block!");
|
||||||
large_18290_basic_3b.make_callable<blt::gp::detail::empty_t>()(nullptr, stack, stack, nullptr);
|
large_18290_basic_3b.make_callable<blt::gp::detail::empty_t>()(nullptr, stack, stack);
|
||||||
BLT_TRACE_STREAM << stack.size() << "\n";
|
BLT_TRACE_STREAM << stack.size() << "\n";
|
||||||
auto val = stack.pop<large_18290>();
|
auto val = stack.pop<large_18290>();
|
||||||
stack.pop<std::array<blt::u8, 20480 - 18290 - 32>>();
|
stack.pop<std::array<blt::u8, 20480 - 18290 - 32>>();
|
||||||
|
@ -480,12 +480,12 @@ void test_large_18290()
|
||||||
stack.push(true);
|
stack.push(true);
|
||||||
auto size = stack.size();
|
auto size = stack.size();
|
||||||
BLT_TRACE_STREAM << size << "\n";
|
BLT_TRACE_STREAM << size << "\n";
|
||||||
large_18290_basic_3b.make_callable<blt::gp::detail::empty_t>()(nullptr, stack, stack, nullptr);
|
large_18290_basic_3b.make_callable<blt::gp::detail::empty_t>()(nullptr, stack, stack);
|
||||||
BLT_TRACE_STREAM << stack.size() << "\n";
|
BLT_TRACE_STREAM << stack.size() << "\n";
|
||||||
stack.push(-2543.0f);
|
stack.push(-2543.0f);
|
||||||
stack.push(true);
|
stack.push(true);
|
||||||
BLT_TRACE_STREAM << stack.size() << "\n";
|
BLT_TRACE_STREAM << stack.size() << "\n";
|
||||||
large_18290_basic_3b.make_callable<blt::gp::detail::empty_t>()(nullptr, stack, stack, nullptr);
|
large_18290_basic_3b.make_callable<blt::gp::detail::empty_t>()(nullptr, stack, stack);
|
||||||
BLT_TRACE_STREAM << stack.size() << "\n";
|
BLT_TRACE_STREAM << stack.size() << "\n";
|
||||||
auto val = stack.pop<large_18290>();
|
auto val = stack.pop<large_18290>();
|
||||||
RUN_TEST(!compare(val, base_18290), stack, "Large 18290 3 Boundary Test Passed", "Large 4096 3 Test Failed. Unexpected value produced '%lf'", val);
|
RUN_TEST(!compare(val, base_18290), stack, "Large 18290 3 Boundary Test Passed", "Large 4096 3 Test Failed. Unexpected value produced '%lf'", val);
|
||||||
|
|
Loading…
Reference in New Issue