⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 chk_once.cpp

📁 一个不错
💻 CPP
字号:
/* Copyright is licensed under GNU LGPL.                 by I.J.Wang 2003   Build: make chk_once*/#include "wyret.h"#include "wyonce.h"#include "wystr.h"#include <iostream>#if WYONCE_VERSION!=31#error Test code is for WYONCE_VERSION 31#endifstatic int t_once_count=0;static void t_once(void){ ++t_once_count;   // each time this function called, t_once_count incremented.};/*static void t_once_throw(void){ throw Wym_ENOSYS;};*///// Test WyOnce//static void t1(void){ WyOnce a0,a1; if(a0.is_default()==false) {   WY_THROW( WyRet() ); } if(a1.is_default()==false) {   WY_THROW( WyRet() ); } if(t_once_count!=0) {   WY_THROW( WyRet() );  // assertion failure } a0.once(t_once); if(t_once_count!=1) {   WY_THROW( WyRet() );  // assertion failure } if(a0.is_default()) {   WY_THROW( WyRet() ); } // repeat a0 a0.once(t_once); if(t_once_count!=1) {   WY_THROW( WyRet() );  // assertion failure } if(a0.is_default()) {   WY_THROW( WyRet() ); } a0.once(t_once); if(t_once_count!=1) {   WY_THROW( WyRet() );  // assertion failure } if(a0.is_default()) {   WY_THROW( WyRet() ); } // use a1 test again a1.once(t_once); if(t_once_count!=2) {   WY_THROW( WyRet() );  // assertion failure } if(a1.is_default()) {   WY_THROW( WyRet() ); } // repeat on a1 a1.once(t_once); if(t_once_count!=2) {   WY_THROW( WyRet() );  // assertion failure } if(a1.is_default()) {   WY_THROW( WyRet() ); }}//// Test WyOnce(void(*)(void))//static void t2(void){ t_once_count=0;            // reset count static WyOnce a0(t_once);  // constructor call if(a0.is_default()) {   WY_THROW( WyRet() ); } if(t_once_count!=1) {   WY_THROW( WyRet() );  // assertion failure } // use a0 again a0.once(t_once); if(t_once_count!=1) {   WY_THROW( WyRet() );  // assertion failure } if(a0.is_default()) {   WY_THROW( WyRet() ); }};//// Test WyOnce(void(*)(void))/once(..) throw//static void t3(void){ // Test failed, so disable this check /*  {  try {    WyOnce tmp(t_once_throw);    tmp.is_default();        // supress unused warning msg    WY_THROW( WyRet() );  }  catch(const WyReply& e) {    // FALLTHROUGH  }; } {  try {    WyOnce tmp;    tmp.once(t_once_throw);    WY_THROW( WyRet() );  }  catch(const WyReply& e) {    // FALLTHROUGH  }; } */};static const WyStr chdr(                  "+---------------+\n"                  "| main() caught:|\n"                  "+---------------+\n");int main(void) throw()try { std::cout << "Checking wyonce.cpp ...\n"; t1();  t2(); t3(); std::cout << "Checked Ok\n"; return(0);}catch(const WyRet& e) { std::cerr << chdr.c_str() << Wy::wrd(e).c_str() << std::endl; return(-1);}catch(const std::exception& e) { std::cerr << chdr.c_str() << "std::exception" << std::endl; return(-1);}catch(...) { std::cerr << chdr.c_str() << "unknown unwind" << std::endl; return(-1);};

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -