mirror of
https://github.com/llvm/llvm-project.git
synced 2025-04-25 20:56:06 +00:00

We intend to replace heuristics based code completion ranking with a Decision Forest Model. This patch introduces a format for representing the model and an inference runtime that is code-generated at build time. - Forest.json contains all the trees as an array of trees. - Features.json describes the features to be used. - Codegen file takes the above two files and generates CompletionModel containing Feature struct and corresponding Evaluate function. The Evaluate function maps a feature to a real number describing the relevance of this candidate. - The codegen is part of build system and these files are generated at build time. - Proposes a way to test the generated runtime using a test model. - Replicates the model structure in unittests. - unittest tests both the test model (for correct tree traversal) and the real model (for sanity). This reverts commit 549e55b3d5634870aa9d42135f51ad46a6a0e347.
30 lines
815 B
C++
30 lines
815 B
C++
#include "DecisionForestRuntimeTest.h"
|
|
#include "decision_forest_model/CategoricalFeature.h"
|
|
#include "gtest/gtest.h"
|
|
|
|
namespace clang {
|
|
namespace clangd {
|
|
|
|
TEST(DecisionForestRuntime, Evaluate) {
|
|
using Example = ::ns1::ns2::test::Example;
|
|
using Cat = ::ns1::ns2::TestEnum;
|
|
using ::ns1::ns2::test::Evaluate;
|
|
|
|
Example E;
|
|
E.setANumber(200); // True
|
|
E.setAFloat(0); // True: +10.0
|
|
E.setACategorical(Cat::A); // True: +5.0
|
|
EXPECT_EQ(Evaluate(E), 15.0);
|
|
|
|
E.setANumber(200); // True
|
|
E.setAFloat(-2.5); // False: -20.0
|
|
E.setACategorical(Cat::B); // True: +5.0
|
|
EXPECT_EQ(Evaluate(E), -15.0);
|
|
|
|
E.setANumber(100); // False
|
|
E.setACategorical(Cat::C); // True: +3.0, False: -6.0
|
|
EXPECT_EQ(Evaluate(E), -3.0);
|
|
}
|
|
} // namespace clangd
|
|
} // namespace clang
|