Changeset 3373 for trunk/test_more


Ignore:
Timestamp:
Sep 28, 2014 3:13:04 PM (5 years ago)
Author:
bradbell
Message:

Convert bug/opt_cond_exp.sh to a test in test_more/optimize.cpp (fixed).

whats_new_14.omh: description of this bug fix.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/test_more/optimize.cpp

    r3371 r3373  
    15481548        }
    15491549        // -----------------------------------------------------------------------
     1550        // Test reverse mode conditionalay skipping commands.
     1551        template <class Type>
     1552        Type my_max(const CppAD::vector<Type>& arg)
     1553        {       Type res = arg[0];
     1554                for(size_t j = 0;j < arg.size(); j++)
     1555                res = CondExpGt(res, arg[j], res, arg[j]);
     1556                return res;
     1557        }
     1558        bool cond_exp_reverse(void)
     1559        {       bool ok = true;
     1560                size_t n = 3;
     1561                using CppAD::vector;
     1562                using CppAD::AD;
     1563       
     1564                vector< AD<double> > ax(n), ay(1);
     1565                for(size_t j = 0; j < n; j++)
     1566                        ax[j] = 1.0;
     1567                Independent(ax);
     1568                ay[0] = my_max(ax) + my_max(ax);
     1569                CppAD::ADFun<double> f(ax, ay);
     1570       
     1571                f.optimize();
     1572       
     1573                vector<double> x(n), w(1), dx(n);
     1574                for(size_t j = 0;j < n; j++)
     1575                        x[j] = double(j);
     1576                f.Forward(0, x);
     1577                w[0] = 1.0;
     1578                dx = f.Reverse(1, w);
     1579                for(size_t j = 0; j < n; j++)
     1580                {       if( j == n-1 )
     1581                                ok &= dx[j] == 2.0;
     1582                        else
     1583                                ok &= dx[j] == 0.0;
     1584                }
     1585                return ok;
     1586        }
    15501587}
    15511588
     
    15961633        // check conditional dependence through atomic function
    15971634        ok     &= cond_exp_atomic_dependence();
     1635        // check reverse mode conditional skipping
     1636        ok     &= cond_exp_reverse();
    15981637        //
    15991638        CppAD::user_atomic<double>::clear();
Note: See TracChangeset for help on using the changeset viewer.