/** * @brief Example C based BPF program that performs operations * on floating point values. The test fails if floating point * emulation functions were not linked to the module. */ #include extern uint64_t entrypoint(const uint8_t *input) { SolAccountInfo ka[1]; SolParameters params = (SolParameters) { .ka = ka }; if (!sol_deserialize(input, ¶ms, SOL_ARRAY_SIZE(ka))) { return ERROR_INVALID_ARGUMENT; } /* test float conversion to int compiles and works */ uint32_t *data = (uint32_t *)(params.ka[0].data); uint32_t new_data = *data + 1; *data += 1.5; sol_assert(*data == new_data); /* test signed division works for FP values */ double value = (double)new_data + 1.0; value /= -2.0; sol_assert(value < 0.0); return SUCCESS; }