LCOV - code coverage report
Current view: top level - app/src/Opt - GoldenSectionSolver.cpp (source / functions) Hit Total Coverage
Test: coverage.info Lines: 32 32 100.0 %
Date: 2023-08-17 16:45:52 Functions: 3 3 100.0 %

          Line data    Source code
       1             : #include "Opt/GoldenSectionSolver.hpp"
       2             : 
       3             : using namespace std;
       4             : using namespace Opt;
       5             : 
       6             : typedef GoldenSectionSolver::Var Var;
       7             : 
       8          10 : void GoldenSectionSolver::setInterval(Var left_, Var right_) {
       9          10 :     left  = left_;
      10          10 :     right = right_;
      11          10 : }
      12             : 
      13          10 : void GoldenSectionSolver::setStopCriteria(Var e) {
      14          10 :     epsilon = e;
      15          10 : }
      16             : 
      17          12 : pair<Var, Var> GoldenSectionSolver::solveInterval(Problem f) {
      18          12 :     Var l = left, r = right;
      19             : 
      20          12 :     Var a  = r - (r - l) * GOLDEN_SECTION;
      21          12 :     Var b  = l + (r - l) * GOLDEN_SECTION;
      22          12 :     Var ya = f(a);
      23          24 :     Var yb = f(b);
      24         436 :     while(b - l > epsilon) {
      25         424 :         Var lprev = l, rprev = r;
      26         424 :         if(ya <= yb) {
      27         242 :             r  = b;
      28         242 :             b  = a;
      29         242 :             yb = ya;
      30         242 :             a  = r - (r - l) * GOLDEN_SECTION;
      31         484 :             ya = f(a);
      32             :         } else {
      33         182 :             l  = a;
      34         182 :             a  = b;
      35         182 :             ya = yb;
      36         182 :             b  = l + (r - l) * GOLDEN_SECTION;
      37         364 :             yb = f(b);
      38             :         }
      39         424 : #pragma GCC diagnostic push
      40         424 : #pragma GCC diagnostic ignored "-Wfloat-equal"
      41         424 :         if(l == lprev && r == rprev)
      42             :             break;
      43             : #pragma GCC diagnostic pop
      44             :     }
      45             : 
      46          12 :     if(ya <= yb) {
      47             :         r = b;
      48             :     } else {
      49           5 :         l = a;
      50             :     }
      51             : 
      52          12 :     return make_pair(l, r);
      53             : }

Generated by: LCOV version 1.14