157 lines
5.9 KiB
C++
157 lines
5.9 KiB
C++
/*
|
|
* Copyright (C) 2017 The Android Open Source Project
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*/
|
|
|
|
#include "common/fml-parser.h"
|
|
|
|
#include "common/feature-descriptors.h"
|
|
#include "gtest/gtest.h"
|
|
|
|
namespace libtextclassifier {
|
|
namespace nlp_core {
|
|
|
|
TEST(FMLParserTest, NoFeature) {
|
|
FMLParser fml_parser;
|
|
FeatureExtractorDescriptor descriptor;
|
|
const std::string kFeatureName = "";
|
|
EXPECT_TRUE(fml_parser.Parse(kFeatureName, &descriptor));
|
|
EXPECT_EQ(0, descriptor.feature_size());
|
|
}
|
|
|
|
TEST(FMLParserTest, FeatureWithNoParams) {
|
|
FMLParser fml_parser;
|
|
FeatureExtractorDescriptor descriptor;
|
|
const std::string kFeatureName = "continuous-bag-of-relevant-scripts";
|
|
EXPECT_TRUE(fml_parser.Parse(kFeatureName, &descriptor));
|
|
EXPECT_EQ(1, descriptor.feature_size());
|
|
EXPECT_EQ(kFeatureName, descriptor.feature(0).type());
|
|
}
|
|
|
|
TEST(FMLParserTest, FeatureWithOneKeywordParameter) {
|
|
FMLParser fml_parser;
|
|
FeatureExtractorDescriptor descriptor;
|
|
EXPECT_TRUE(fml_parser.Parse("myfeature(start=2)", &descriptor));
|
|
EXPECT_EQ(1, descriptor.feature_size());
|
|
EXPECT_EQ("myfeature", descriptor.feature(0).type());
|
|
EXPECT_EQ(1, descriptor.feature(0).parameter_size());
|
|
EXPECT_EQ("start", descriptor.feature(0).parameter(0).name());
|
|
EXPECT_EQ("2", descriptor.feature(0).parameter(0).value());
|
|
EXPECT_FALSE(descriptor.feature(0).has_argument());
|
|
}
|
|
|
|
TEST(FMLParserTest, FeatureWithDefaultArgumentNegative) {
|
|
FMLParser fml_parser;
|
|
FeatureExtractorDescriptor descriptor;
|
|
EXPECT_TRUE(fml_parser.Parse("offset(-3)", &descriptor));
|
|
EXPECT_EQ(1, descriptor.feature_size());
|
|
EXPECT_EQ("offset", descriptor.feature(0).type());
|
|
EXPECT_EQ(0, descriptor.feature(0).parameter_size());
|
|
EXPECT_EQ(-3, descriptor.feature(0).argument());
|
|
}
|
|
|
|
TEST(FMLParserTest, FeatureWithDefaultArgumentPositive) {
|
|
FMLParser fml_parser;
|
|
FeatureExtractorDescriptor descriptor;
|
|
EXPECT_TRUE(fml_parser.Parse("delta(7)", &descriptor));
|
|
EXPECT_EQ(1, descriptor.feature_size());
|
|
EXPECT_EQ("delta", descriptor.feature(0).type());
|
|
EXPECT_EQ(0, descriptor.feature(0).parameter_size());
|
|
EXPECT_EQ(7, descriptor.feature(0).argument());
|
|
}
|
|
|
|
TEST(FMLParserTest, FeatureWithDefaultArgumentZero) {
|
|
FMLParser fml_parser;
|
|
FeatureExtractorDescriptor descriptor;
|
|
EXPECT_TRUE(fml_parser.Parse("delta(0)", &descriptor));
|
|
EXPECT_EQ(1, descriptor.feature_size());
|
|
EXPECT_EQ("delta", descriptor.feature(0).type());
|
|
EXPECT_EQ(0, descriptor.feature(0).parameter_size());
|
|
EXPECT_EQ(0, descriptor.feature(0).argument());
|
|
}
|
|
|
|
TEST(FMLParserTest, FeatureWithManyKeywordParameters) {
|
|
FMLParser fml_parser;
|
|
FeatureExtractorDescriptor descriptor;
|
|
EXPECT_TRUE(fml_parser.Parse("myfeature(ratio=0.316,start=2,name=\"foo\")",
|
|
&descriptor));
|
|
EXPECT_EQ(1, descriptor.feature_size());
|
|
EXPECT_EQ("myfeature", descriptor.feature(0).type());
|
|
EXPECT_EQ(3, descriptor.feature(0).parameter_size());
|
|
EXPECT_EQ("ratio", descriptor.feature(0).parameter(0).name());
|
|
EXPECT_EQ("0.316", descriptor.feature(0).parameter(0).value());
|
|
EXPECT_EQ("start", descriptor.feature(0).parameter(1).name());
|
|
EXPECT_EQ("2", descriptor.feature(0).parameter(1).value());
|
|
EXPECT_EQ("name", descriptor.feature(0).parameter(2).name());
|
|
EXPECT_EQ("foo", descriptor.feature(0).parameter(2).value());
|
|
EXPECT_FALSE(descriptor.feature(0).has_argument());
|
|
}
|
|
|
|
TEST(FMLParserTest, FeatureWithAllKindsOfParameters) {
|
|
FMLParser fml_parser;
|
|
FeatureExtractorDescriptor descriptor;
|
|
EXPECT_TRUE(
|
|
fml_parser.Parse("myfeature(17,ratio=0.316,start=2)", &descriptor));
|
|
EXPECT_EQ(1, descriptor.feature_size());
|
|
EXPECT_EQ("myfeature", descriptor.feature(0).type());
|
|
EXPECT_EQ(2, descriptor.feature(0).parameter_size());
|
|
EXPECT_EQ("ratio", descriptor.feature(0).parameter(0).name());
|
|
EXPECT_EQ("0.316", descriptor.feature(0).parameter(0).value());
|
|
EXPECT_EQ("start", descriptor.feature(0).parameter(1).name());
|
|
EXPECT_EQ("2", descriptor.feature(0).parameter(1).value());
|
|
EXPECT_EQ(17, descriptor.feature(0).argument());
|
|
}
|
|
|
|
TEST(FMLParserTest, FeatureWithWhitespaces) {
|
|
FMLParser fml_parser;
|
|
FeatureExtractorDescriptor descriptor;
|
|
EXPECT_TRUE(fml_parser.Parse(
|
|
" myfeature\t\t\t\n(17,\nratio=0.316 , start=2) ", &descriptor));
|
|
EXPECT_EQ(1, descriptor.feature_size());
|
|
EXPECT_EQ("myfeature", descriptor.feature(0).type());
|
|
EXPECT_EQ(2, descriptor.feature(0).parameter_size());
|
|
EXPECT_EQ("ratio", descriptor.feature(0).parameter(0).name());
|
|
EXPECT_EQ("0.316", descriptor.feature(0).parameter(0).value());
|
|
EXPECT_EQ("start", descriptor.feature(0).parameter(1).name());
|
|
EXPECT_EQ("2", descriptor.feature(0).parameter(1).value());
|
|
EXPECT_EQ(17, descriptor.feature(0).argument());
|
|
}
|
|
|
|
TEST(FMLParserTest, Broken_ParamWithoutValue) {
|
|
FMLParser fml_parser;
|
|
FeatureExtractorDescriptor descriptor;
|
|
EXPECT_FALSE(
|
|
fml_parser.Parse("myfeature(17,ratio=0.316,start)", &descriptor));
|
|
}
|
|
|
|
TEST(FMLParserTest, Broken_MissingCloseParen) {
|
|
FMLParser fml_parser;
|
|
FeatureExtractorDescriptor descriptor;
|
|
EXPECT_FALSE(fml_parser.Parse("myfeature(17,ratio=0.316", &descriptor));
|
|
}
|
|
|
|
TEST(FMLParserTest, Broken_MissingOpenParen) {
|
|
FMLParser fml_parser;
|
|
FeatureExtractorDescriptor descriptor;
|
|
EXPECT_FALSE(fml_parser.Parse("myfeature17,ratio=0.316)", &descriptor));
|
|
}
|
|
|
|
TEST(FMLParserTest, Broken_MissingQuote) {
|
|
FMLParser fml_parser;
|
|
FeatureExtractorDescriptor descriptor;
|
|
EXPECT_FALSE(fml_parser.Parse("count(17,name=\"foo)", &descriptor));
|
|
}
|
|
|
|
} // namespace nlp_core
|
|
} // namespace libtextclassifier
|