18cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd/** 28cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * @file cached_value_tests.cpp 38cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * tests cached_value.h 48cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * 58cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * @remark Copyright 2005 OProfile authors 68cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * @remark Read the file COPYING 78cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * 88cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * @author John Levon 98cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd */ 108cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 118cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd#include <cstdlib> 128cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd#include <iostream> 138cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd#include <string> 148cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 158cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd#include "cached_value.h" 168cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 178cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Doddusing namespace std; 188cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 198cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Doddnamespace { 208cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 218cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 228cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Doddbool check_throw(cached_value<bool> const & boolval) 238cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd{ 248cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd try { 258cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd bool foo = boolval.get(); 268cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd foo = false; 278cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd } catch (op_fatal_error const & e) { 288cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd return true; 298cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd } 308cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd return false; 318cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd} 328cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 338cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 348cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Doddint check_cached(void) 358cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd{ 368cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd cached_value<bool> boolval; 378cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd cached_value<string> strval; 388cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 398cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if (!check_throw(boolval)) { 408cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd cerr << "get() on no value didn't throw\n"; 418cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd return EXIT_FAILURE; 428cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd } 438cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 448cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if (boolval.reset(false) != false || boolval.get() != false) { 458cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd cerr << "reset() of cached value \"false\" didn't work\n"; 468cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd return EXIT_FAILURE; 478cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd } 488cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 498cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if (boolval.reset(true) != true || boolval.get() != true) { 508cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd cerr << "reset() of cached value \"true\" didn't work\n"; 518cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd return EXIT_FAILURE; 528cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd } 538cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 548cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if (strval.reset("foo") != "foo" || strval.get() != "foo") { 558cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd cerr << "reset() of cached value \"foo\" didn't work\n"; 568cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd return EXIT_FAILURE; 578cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd } 588cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 598cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if (strval.reset("") != "" || strval.get() != "") { 608cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd cerr << "reset() of cached value \"\" didn't work\n"; 618cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd return EXIT_FAILURE; 628cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd } 638cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 648cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd return EXIT_SUCCESS; 658cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd} 668cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 678cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd}; 688cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 698cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Doddint main() 708cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd{ 718cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd try { 728cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd check_cached(); 738cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd } 748cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd catch (...) { 758cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd cerr << "unknown exception\n"; 768cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd return EXIT_FAILURE; 778cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd } 788cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 798cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd return EXIT_SUCCESS; 808cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd} 81