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