summaryrefslogtreecommitdiffstats
path: root/searchlib/src/tests/fef/table
diff options
context:
space:
mode:
authorJon Bratseth <bratseth@yahoo-inc.com>2016-06-15 23:09:44 +0200
committerJon Bratseth <bratseth@yahoo-inc.com>2016-06-15 23:09:44 +0200
commit72231250ed81e10d66bfe70701e64fa5fe50f712 (patch)
tree2728bba1131a6f6e5bdf95afec7d7ff9358dac50 /searchlib/src/tests/fef/table
Publish
Diffstat (limited to 'searchlib/src/tests/fef/table')
-rw-r--r--searchlib/src/tests/fef/table/.gitignore4
-rw-r--r--searchlib/src/tests/fef/table/CMakeLists.txt8
-rw-r--r--searchlib/src/tests/fef/table/DESC1
-rw-r--r--searchlib/src/tests/fef/table/FILES1
-rw-r--r--searchlib/src/tests/fef/table/table_test.cpp159
-rw-r--r--searchlib/src/tests/fef/table/tables1/a3
-rw-r--r--searchlib/src/tests/fef/table/tables2/a3
-rw-r--r--searchlib/src/tests/fef/table/tables2/b3
8 files changed, 182 insertions, 0 deletions
diff --git a/searchlib/src/tests/fef/table/.gitignore b/searchlib/src/tests/fef/table/.gitignore
new file mode 100644
index 00000000000..b89a30490e0
--- /dev/null
+++ b/searchlib/src/tests/fef/table/.gitignore
@@ -0,0 +1,4 @@
+.depend
+Makefile
+table_test
+searchlib_table_test_app
diff --git a/searchlib/src/tests/fef/table/CMakeLists.txt b/searchlib/src/tests/fef/table/CMakeLists.txt
new file mode 100644
index 00000000000..ca61eb7c365
--- /dev/null
+++ b/searchlib/src/tests/fef/table/CMakeLists.txt
@@ -0,0 +1,8 @@
+# Copyright 2016 Yahoo Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+vespa_add_executable(searchlib_table_test_app
+ SOURCES
+ table_test.cpp
+ DEPENDS
+ searchlib
+)
+vespa_add_test(NAME searchlib_table_test_app COMMAND searchlib_table_test_app)
diff --git a/searchlib/src/tests/fef/table/DESC b/searchlib/src/tests/fef/table/DESC
new file mode 100644
index 00000000000..65834ed1305
--- /dev/null
+++ b/searchlib/src/tests/fef/table/DESC
@@ -0,0 +1 @@
+table test. Take a look at table.cpp for details.
diff --git a/searchlib/src/tests/fef/table/FILES b/searchlib/src/tests/fef/table/FILES
new file mode 100644
index 00000000000..40be726aeb8
--- /dev/null
+++ b/searchlib/src/tests/fef/table/FILES
@@ -0,0 +1 @@
+table.cpp
diff --git a/searchlib/src/tests/fef/table/table_test.cpp b/searchlib/src/tests/fef/table/table_test.cpp
new file mode 100644
index 00000000000..2d05e0c7310
--- /dev/null
+++ b/searchlib/src/tests/fef/table/table_test.cpp
@@ -0,0 +1,159 @@
+// Copyright 2016 Yahoo Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+#include <vespa/fastos/fastos.h>
+#include <vespa/log/log.h>
+LOG_SETUP("tablemanager_test");
+#include <vespa/vespalib/testkit/testapp.h>
+
+#include <fstream>
+#include <limits>
+#include <iostream>
+#include <vespa/searchlib/fef/filetablefactory.h>
+#include <vespa/searchlib/fef/functiontablefactory.h>
+#include <vespa/searchlib/fef/table.h>
+#include <vespa/searchlib/fef/tablemanager.h>
+
+namespace search {
+namespace fef {
+
+class TableTest : public vespalib::TestApp
+{
+private:
+ bool assertTable(const Table & act, const Table & exp);
+ bool assertCreateTable(const ITableFactory & tf, const vespalib::string & name, const Table & exp);
+ void testTable();
+ void testFileTableFactory();
+ void testFunctionTableFactory();
+ void testTableManager();
+
+public:
+ int Main();
+};
+
+bool
+TableTest::assertTable(const Table & act, const Table & exp)
+{
+ if (!EXPECT_EQUAL(act.size(), exp.size())) return false;
+ for (size_t i = 0; i < act.size(); ++i) {
+ if (!EXPECT_APPROX(act[i], exp[i], 0.01)) return false;
+ }
+ return true;
+}
+
+bool
+TableTest::assertCreateTable(const ITableFactory & tf, const vespalib::string & name, const Table & exp)
+{
+ Table::SP t = tf.createTable(name);
+ if (!EXPECT_TRUE(t.get() != NULL)) return false;
+ return assertTable(*t, exp);
+}
+
+void
+TableTest::testTable()
+{
+ Table t;
+ EXPECT_EQUAL(t.size(), 0u);
+ EXPECT_EQUAL(t.max(), -std::numeric_limits<double>::max());
+ t.add(1).add(2);
+ EXPECT_EQUAL(t.size(), 2u);
+ EXPECT_EQUAL(t.max(), 2);
+ EXPECT_EQUAL(t[0], 1);
+ EXPECT_EQUAL(t[1], 2);
+ t.add(10);
+ EXPECT_EQUAL(t.size(), 3u);
+ EXPECT_EQUAL(t.max(), 10);
+ EXPECT_EQUAL(t[2], 10);
+ t.add(5);
+ EXPECT_EQUAL(t.size(), 4u);
+ EXPECT_EQUAL(t.max(), 10);
+ EXPECT_EQUAL(t[3], 5);
+}
+
+void
+TableTest::testFileTableFactory()
+{
+ {
+ FileTableFactory ftf("tables1");
+ EXPECT_TRUE(assertCreateTable(ftf, "a", Table().add(1.5).add(2.25).add(3)));
+ EXPECT_TRUE(ftf.createTable("b").get() == NULL);
+ }
+ {
+ FileTableFactory ftf("tables1/");
+ EXPECT_TRUE(ftf.createTable("a").get() != NULL);
+ }
+}
+
+void
+TableTest::testFunctionTableFactory()
+{
+ FunctionTableFactory ftf(2);
+ EXPECT_TRUE(assertCreateTable(ftf, "expdecay(400,12)",
+ Table().add(400).add(368.02)));
+ EXPECT_TRUE(assertCreateTable(ftf, "loggrowth(1000,5000,1)",
+ Table().add(5000).add(5693.15)));
+ EXPECT_TRUE(assertCreateTable(ftf, "linear(10,100)",
+ Table().add(100).add(110)));
+ // specify table size
+ EXPECT_TRUE(assertCreateTable(ftf, "expdecay(400,12,3)",
+ Table().add(400).add(368.02).add(338.60)));
+ EXPECT_TRUE(assertCreateTable(ftf, "loggrowth(1000,5000,1,3)",
+ Table().add(5000).add(5693.15).add(6098.61)));
+ EXPECT_TRUE(assertCreateTable(ftf, "linear(10,100,3)",
+ Table().add(100).add(110).add(120)));
+ EXPECT_TRUE(ftf.createTable("expdecay()").get() == NULL);
+ EXPECT_TRUE(ftf.createTable("expdecay(10)").get() == NULL);
+ EXPECT_TRUE(ftf.createTable("loggrowth()").get() == NULL);
+ EXPECT_TRUE(ftf.createTable("linear()").get() == NULL);
+ EXPECT_TRUE(ftf.createTable("none").get() == NULL);
+ EXPECT_TRUE(ftf.createTable("none(").get() == NULL);
+ EXPECT_TRUE(ftf.createTable("none)").get() == NULL);
+ EXPECT_TRUE(ftf.createTable("none)(").get() == NULL);
+}
+
+void
+TableTest::testTableManager()
+{
+ {
+ TableManager tm;
+ tm.addFactory(ITableFactory::SP(new FileTableFactory("tables1")));
+ tm.addFactory(ITableFactory::SP(new FileTableFactory("tables2")));
+
+ {
+ const Table * t = tm.getTable("a"); // from tables1
+ ASSERT_TRUE(t != NULL);
+ EXPECT_TRUE(assertTable(*t, Table().add(1.5).add(2.25).add(3)));
+ EXPECT_TRUE(t == tm.getTable("a"));
+ }
+ {
+ const Table * t = tm.getTable("b"); // from tables2
+ ASSERT_TRUE(t != NULL);
+ EXPECT_TRUE(assertTable(*t, Table().add(40).add(50).add(60)));
+ EXPECT_TRUE(t == tm.getTable("b"));
+ }
+ {
+ EXPECT_TRUE(tm.getTable("c") == NULL);
+ EXPECT_TRUE(tm.getTable("c") == NULL);
+ }
+ }
+ {
+ TableManager tm;
+ ASSERT_TRUE(tm.getTable("a") == NULL);
+ }
+}
+
+int
+TableTest::Main()
+{
+ TEST_INIT("table_test");
+
+ testTable();
+ testFileTableFactory();
+ testFunctionTableFactory();
+ testTableManager();
+
+ TEST_DONE();
+}
+
+}
+}
+
+TEST_APPHOOK(search::fef::TableTest);
diff --git a/searchlib/src/tests/fef/table/tables1/a b/searchlib/src/tests/fef/table/tables1/a
new file mode 100644
index 00000000000..c46f4d59a71
--- /dev/null
+++ b/searchlib/src/tests/fef/table/tables1/a
@@ -0,0 +1,3 @@
+1.5
+2.25
+3
diff --git a/searchlib/src/tests/fef/table/tables2/a b/searchlib/src/tests/fef/table/tables2/a
new file mode 100644
index 00000000000..300ed6fcd17
--- /dev/null
+++ b/searchlib/src/tests/fef/table/tables2/a
@@ -0,0 +1,3 @@
+10
+20
+30
diff --git a/searchlib/src/tests/fef/table/tables2/b b/searchlib/src/tests/fef/table/tables2/b
new file mode 100644
index 00000000000..6f98b52f55f
--- /dev/null
+++ b/searchlib/src/tests/fef/table/tables2/b
@@ -0,0 +1,3 @@
+40
+50
+60