summaryrefslogtreecommitdiff
path: root/fuzzylite/test/QuickTest.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'fuzzylite/test/QuickTest.cpp')
-rw-r--r--fuzzylite/test/QuickTest.cpp128
1 files changed, 128 insertions, 0 deletions
diff --git a/fuzzylite/test/QuickTest.cpp b/fuzzylite/test/QuickTest.cpp
new file mode 100644
index 0000000..9108fde
--- /dev/null
+++ b/fuzzylite/test/QuickTest.cpp
@@ -0,0 +1,128 @@
+/*
+ fuzzylite (R), a fuzzy logic control library in C++.
+ Copyright (C) 2010-2017 FuzzyLite Limited. All rights reserved.
+ Author: Juan Rada-Vilela, Ph.D. <jcrada@fuzzylite.com>
+
+ This file is part of fuzzylite.
+
+ fuzzylite is free software: you can redistribute it and/or modify it under
+ the terms of the FuzzyLite License included with the software.
+
+ You should have received a copy of the FuzzyLite License along with
+ fuzzylite. If not, see <http://www.fuzzylite.com/license/>.
+
+ fuzzylite is a registered trademark of FuzzyLite Limited.
+ */
+
+#include "test/catch.hpp"
+#include "fl/Headers.h"
+
+namespace fl {
+
+ TEST_CASE("Increment ", "[op][increment]") {
+ std::vector<int> sampleValues, minSampleValues, maxSampleValues;
+ for (std::size_t i = 0; i < 2; ++i) {
+ sampleValues.push_back(0);
+ minSampleValues.push_back(0);
+ if (i == 0)
+ maxSampleValues.push_back(10);
+ else maxSampleValues.push_back(0);
+ }
+ int times = 0;
+ do {
+ times++;
+ FL_LOG(times << " " << Op::join(sampleValues, ","));
+ } while (Op::increment(sampleValues, minSampleValues, maxSampleValues));
+
+ CHECK(times == 10 + 1);
+ }
+
+ TEST_CASE("Op::split splits multiline", "[op][split]") {
+ std::string multiline = "1\n2\n3\n4";
+ std::vector<std::string> split = Op::split(multiline, "\n");
+ CHECK(split.size() == 4);
+ }
+
+ TEST_CASE("Op::str produces correct numbers", "[op][str]") {
+ fuzzylite::setLogging(true);
+ fuzzylite::setDecimals(3);
+
+ FL_LOG(Op::str(1.0));
+ FL_LOG(Op::str((long) 5000));
+ FL_LOG(Op::str((int) 6000));
+ FL_LOG(Op::str(std::size_t(6000)));
+ FL_LOG(Op::str(scalar(0.333333)));
+ FL_LOG(Op::str(float(0.333333)));
+ FL_LOG(Op::str(double(0.333333)));
+ FL_LOG(Op::str(double(0.333333), 9));
+
+ CHECK(Op::str(0) == "0");
+ CHECK(Op::str(1) == "1");
+ CHECK(Op::str(1.0) == "1.000");
+ CHECK(Op::str((long) 5000) == "5000");
+ CHECK(Op::str((int) 6000) == "6000");
+ CHECK(Op::str(std::size_t(6000)) == "6000");
+ CHECK(Op::str(scalar(0.333333)) == "0.333");
+ CHECK(Op::str(float(0.333333)) == "0.333");
+ CHECK(Op::str(double(0.333333)) == "0.333");
+ CHECK(Op::str(double(0.0000333), 9) == "0.000033300");
+
+ CHECK(Op::str(fuzzylite::macheps()) == "0.000");
+ CHECK(Op::str(fuzzylite::macheps(), 6) == "0.000001");
+ CHECK(Op::str(1e-7) == "0.000");
+ CHECK(Op::str(1e-7, 6) == "0.000000");
+ CHECK(Op::str(1e-7, 7) == "0.0000001");
+
+ FL_LOG("scientific");
+ fuzzylite::setScalarFormat(std::ios_base::scientific);
+ FL_LOG(Op::str(1.0));
+ FL_LOG(Op::str((long) 5000));
+ FL_LOG(Op::str((int) 6000));
+ FL_LOG(Op::str(std::size_t(6000)));
+ FL_LOG(Op::str(scalar(0.333333)));
+ FL_LOG(Op::str(float(0.333333)));
+ FL_LOG(Op::str(double(0.333333)));
+ FL_LOG(Op::str(double(0.0000333), 9));
+
+ CHECK(Op::str(0) == "0");
+ CHECK(Op::str(1.0) == "1.000e+00");
+ CHECK(Op::str((long) 5000) == "5000");
+ CHECK(Op::str((int) 6000) == "6000");
+ CHECK(Op::str(std::size_t(6000)) == "6000");
+ CHECK(Op::str(scalar(0.333333)) == "3.333e-01");
+ CHECK(Op::str(float(0.333333)) == "3.333e-01");
+ CHECK(Op::str(double(0.333333)) == "3.333e-01");
+ CHECK(Op::str(double(0.0000333), 9) == "3.330000000e-05");
+
+ CHECK(Op::isEq(fuzzylite::macheps(), 0.0) == false);
+ CHECK(Op::isEq(fuzzylite::macheps(), 0.0, std::pow(10.0, -6)) == false);
+ CHECK(Op::str(fuzzylite::macheps()) == "0.000e+00");
+ CHECK(Op::str(fuzzylite::macheps(), -1) == "1.000000e-06");
+ CHECK(Op::str(fuzzylite::macheps(), -1, std::ios_base::fmtflags(0x0)) == "1e-06");
+ CHECK(Op::str(1e-7, 6) == "0.000000e+00");
+ CHECK(Op::str(1e-7, 7) == "1.0000000e-07");
+ CHECK(Op::str(1e-7, 7, std::ios_base::fmtflags(0x0)) == "1e-07");
+
+
+ fuzzylite::setScalarFormat(std::ios_base::fixed);
+
+ CHECK(Op::str(0.000001, 6, std::ios_base::fmtflags(0x0)) == "1e-06");
+ CHECK(Op::str(1e-6, 6, std::ios_base::fmtflags(0x0)) == "1e-06");
+ CHECK(Op::str(1e6, 3, std::ios_base::fmtflags(0x0)) == "1e+06");
+ CHECK(Op::str(1000000, 3, std::ios_base::fmtflags(0x0)) == "1000000");
+ CHECK(Op::str(1000000.0, 3, std::ios_base::fmtflags(0x0)) == "1e+06");
+ }
+
+ TEST_CASE("macro expansion does not evaluate parameter before expansion", "[op]") {
+ std::ostringstream os;
+#define FL_MACRO1(x) os << x * 5;
+ FL_MACRO1(4 + 10);
+ CHECK(os.str() == "54");
+
+#define xstr(s) str(s)
+#define str(s) #s
+ CHECK(xstr(4 + 10) == "4 + 10");
+ }
+
+
+}