亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? platformtest.cpp

?? turecrypt6.0版本的源碼
?? CPP
字號:
/*
 Copyright (c) 2008 TrueCrypt Foundation. All rights reserved.

 Governed by the TrueCrypt License 2.5 the full text of which is contained
 in the file License.txt included in TrueCrypt binary and source code
 distribution packages.
*/

#include "PlatformTest.h"
#include "Exception.h"
#include "FileStream.h"
#include "Finally.h"
#include "ForEach.h"
#include "MemoryStream.h"
#include "Mutex.h"
#include "Serializable.h"
#include "SharedPtr.h"
#include "StringConverter.h"
#include "SyncEvent.h"
#include "Thread.h"

namespace TrueCrypt
{
	// make_shared_auto, File, Stream, MemoryStream, Endian, Serializer, Serializable
	void PlatformTest::SerializerTest ()
	{
		shared_ptr <Stream> stream (new MemoryStream);

#if 0
		make_shared_auto (File, file);
		finally_do_arg (File&, *file, { if (finally_arg.IsOpen()) finally_arg.Delete(); });

		try
		{
			file->Open ("truecrypt-serializer-test.tmp", File::CreateReadWrite);
			stream = shared_ptr <Stream> (new FileStream (file));
		}
		catch (...) { }
#endif

		Serializer ser (stream);

		uint32 i32 = 0x12345678;
		uint64 i64 = 0x0123456789abcdefULL;
		string str = "string test";
		wstring wstr = L"wstring test";

		list <string> stringList;
		stringList.push_back (str + "1");
		stringList.push_back (str + "2");
		stringList.push_back (str + "3");

		list <wstring> wstringList;
		wstringList.push_back (wstr + L"1");
		wstringList.push_back (wstr + L"2");
		wstringList.push_back (wstr + L"3");

		Buffer buffer (10);
		for (size_t i = 0; i < buffer.Size(); i++)
			buffer[i] = (byte) i;

		ser.Serialize ("int32", i32);
		ser.Serialize ("int64", i64);
		ser.Serialize ("string", str);
		ser.Serialize ("wstring", wstr);
		ser.Serialize ("stringList", stringList);
		ser.Serialize ("wstringList", wstringList);
		ser.Serialize ("buffer", ConstBufferPtr (buffer));

		ExecutedProcessFailed ex (SRC_POS, "cmd", -123, "error output");
		ex.Serialize (stream);

		list < shared_ptr <ExecutedProcessFailed> > exList;
		exList.push_back (make_shared <ExecutedProcessFailed> (ExecutedProcessFailed (SRC_POS, "cmd", -123, "error output1")));
		exList.push_back (make_shared <ExecutedProcessFailed> (ExecutedProcessFailed (SRC_POS, "cmd", -234, "error output2")));
		exList.push_back (make_shared <ExecutedProcessFailed> (ExecutedProcessFailed (SRC_POS, "cmd", -567, "error output3")));
		Serializable::SerializeList (stream, exList);

#if 0
		if (file->IsOpen())
			file->SeekAt (0);
#endif

		uint32 di32;
		ser.Deserialize ("int32", di32);
		if (i32 != di32)
			throw TestFailed (SRC_POS);

		uint64 di64;
		ser.Deserialize ("int64", di64);
		if (i64 != di64)
			throw TestFailed (SRC_POS);

		string dstr;
		ser.Deserialize ("string", dstr);
		if (str != dstr)
			throw TestFailed (SRC_POS);

		wstring dwstr;
		ser.Deserialize ("wstring", dwstr);
		if (str != dstr)
			throw TestFailed (SRC_POS);

		int i = 1;
		foreach (string item, ser.DeserializeStringList ("stringList"))
		{
			stringstream s;
			s << str << i++;
			if (item != s.str())
				throw TestFailed (SRC_POS);
		}

		i = 1;
		foreach (wstring item, ser.DeserializeWStringList ("wstringList"))
		{
			wstringstream s;
			s << wstr << i++;
			if (item != s.str())
				throw TestFailed (SRC_POS);
		}

		Buffer dbuffer (10);
		ser.Deserialize ("buffer", buffer);
		for (size_t i = 0; i < buffer.Size(); i++)
			if (buffer[i] != (byte) i)
				throw TestFailed (SRC_POS);

		shared_ptr <ExecutedProcessFailed> dex = Serializable::DeserializeNew <ExecutedProcessFailed> (stream);
		if (!dex
			|| dex->GetCommand() != "cmd"
			|| dex->GetExitCode() != -123
			|| dex->GetErrorOutput() != "error output")
			throw TestFailed (SRC_POS);

		list < shared_ptr <ExecutedProcessFailed> > dexList;
		Serializable::DeserializeList (stream, dexList);
		i = 1;
		foreach_ref (const ExecutedProcessFailed &ex, dexList)
		{
			stringstream s;
			s << "error output" << i++;
			if (ex.GetErrorOutput() != s.str())
				throw TestFailed (SRC_POS);
		}
	}
	
	// shared_ptr, Mutex, ScopeLock, SyncEvent, Thread
	static struct 
	{
		shared_ptr <int> SharedIntPtr;
		Mutex IntMutex;
		SyncEvent ExitAllowedEvent;
	} ThreadTestData;

	void PlatformTest::ThreadTest ()
	{
		Mutex mutex;
		mutex.Lock();
		mutex.Unlock();

		const int maxThreads = 3;
		ThreadTestData.SharedIntPtr.reset (new int (0));

		for (int i = 0; i < maxThreads; i++)
		{
			Thread t;
			t.Start (&ThreadTestProc, (void *) &ThreadTestData);
		}

		for (int i = 0; i < 50; i++)
		{
			{
				ScopeLock sl (ThreadTestData.IntMutex);
				if (*ThreadTestData.SharedIntPtr == maxThreads)
					break;
			}

			Thread::Sleep(100);
		}

		if (*ThreadTestData.SharedIntPtr != maxThreads)
			throw TestFailed (SRC_POS);

		for (int i = 0; i < 60000; i++)
		{
			ThreadTestData.ExitAllowedEvent.Signal();
			Thread::Sleep(1);

			ScopeLock sl (ThreadTestData.IntMutex);
			if (*ThreadTestData.SharedIntPtr == 0)
				break;
		}

		if (*ThreadTestData.SharedIntPtr != 0)
			throw TestFailed (SRC_POS);
	}

	TC_THREAD_PROC PlatformTest::ThreadTestProc (void *arg)
	{
		
		if (arg != (void *) &ThreadTestData)
			return 0;

		{
			ScopeLock sl (ThreadTestData.IntMutex);
			++(*ThreadTestData.SharedIntPtr);
		}

		ThreadTestData.ExitAllowedEvent.Wait();

		{
			ScopeLock sl (ThreadTestData.IntMutex);
			--(*ThreadTestData.SharedIntPtr);
		}

		return 0;
	}

	bool PlatformTest::TestAll ()
	{
		// Integer types
		if (sizeof (byte)   != 1 || sizeof (int8)  != 1 || sizeof (__int8)  != 1) throw TestFailed (SRC_POS);
		if (sizeof (uint16) != 2 || sizeof (int16) != 2 || sizeof (__int16) != 2) throw TestFailed (SRC_POS);
		if (sizeof (uint32) != 4 || sizeof (int32) != 4 || sizeof (__int32) != 4) throw TestFailed (SRC_POS);
		if (sizeof (uint64) != 8 || sizeof (int64) != 8 || sizeof (__int64) != 8) throw TestFailed (SRC_POS);

		// Exception handling
		TestFlag = false;
		try
		{
			try
			{
				throw TestFailed (SRC_POS);
			}
			catch (...)
			{
				throw;
			}
			return false;
		}
		catch (Exception &)
		{
			TestFlag = true;
		}
		if (!TestFlag)
			return false;

		// RTTI
		RttiTest rtti;
		RttiTestBase &rttiBaseRef = rtti;
		RttiTestBase *rttiBasePtr = &rtti;

		if (typeid (rttiBaseRef) != typeid (rtti))
			throw TestFailed (SRC_POS);

		if (typeid (*rttiBasePtr) != typeid (rtti))
			throw TestFailed (SRC_POS);

		if (dynamic_cast <RttiTest *> (rttiBasePtr) == nullptr)
			throw TestFailed (SRC_POS);

		try
		{
			dynamic_cast <RttiTest &> (rttiBaseRef);
		}
		catch (...)
		{
			throw TestFailed (SRC_POS);
		}

		// finally
		TestFlag = false;
		{
			finally_do ({ TestFlag = true; });
			if (TestFlag)
				throw TestFailed (SRC_POS);
		}
		if (!TestFlag)
			throw TestFailed (SRC_POS);

		TestFlag = false;
		{
			finally_do_arg (bool&, TestFlag, { finally_arg = true; });
			if (TestFlag)
				throw TestFailed (SRC_POS);
		}
		if (!TestFlag)
			throw TestFailed (SRC_POS);

		TestFlag = false;
		int tesFlag2 = 0;
		{
			finally_do_arg2 (bool&, TestFlag, int&, tesFlag2, { finally_arg = true; finally_arg2 = 2; });
			if (TestFlag || tesFlag2 != 0)
				throw TestFailed (SRC_POS);
		}
		if (!TestFlag || tesFlag2 != 2)
			throw TestFailed (SRC_POS);

		// uint64, vector, list, string, wstring, stringstream, wstringstream
		// shared_ptr, make_shared, StringConverter, foreach
		list <shared_ptr <uint64> > numList;
		
		numList.push_front (make_shared <uint64> (StringConverter::ToUInt64 (StringConverter::FromNumber ((uint64) 0xFFFFffffFFFFfffeULL))));
		numList.push_front (make_shared <uint64> (StringConverter::ToUInt32 (StringConverter::GetTrailingNumber ("str2"))));
		numList.push_front (make_shared <uint64> (3));

		list <wstring> testList;
		wstringstream wstream (L"test");
		foreach_reverse_ref (uint64 n, numList)
		{
			wstream.str (L"");
			wstream << L"str" << n;
			testList.push_back (wstream.str());
		}

		stringstream sstream;
		sstream << "dummy";
		sstream.str ("");
		sstream << "str18446744073709551614,str2" << " str" << StringConverter::Trim (StringConverter::ToSingle (L"\t 3 \r\n"));
		foreach (const string &s, StringConverter::Split (sstream.str(), ", "))
		{
			if (testList.front() != StringConverter::ToWide (s))
				throw TestFailed (SRC_POS);
			testList.pop_front();
		}

		SerializerTest();
		ThreadTest();

		return true;
	}

	bool PlatformTest::TestFlag;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
17c精品麻豆一区二区免费| 7777精品伊人久久久大香线蕉完整版 | 国产精品国产三级国产aⅴ原创| 7777女厕盗摄久久久| 91麻豆精品国产91久久久资源速度| 91国模大尺度私拍在线视频| 91丨porny丨国产入口| 99久久伊人精品| 91麻豆高清视频| 欧美性受xxxx黑人xyx| 欧美视频在线一区| 欧美人妇做爰xxxⅹ性高电影| 欧美日韩国产成人在线免费| 欧美电影在哪看比较好| 91精品国产免费| 久久久www免费人成精品| 国产欧美在线观看一区| 亚洲图片另类小说| 天堂午夜影视日韩欧美一区二区| 青青草伊人久久| 福利一区二区在线| 在线一区二区三区四区| 欧美一级高清大全免费观看| 精品日产卡一卡二卡麻豆| 久久综合九色综合97婷婷女人| 欧美激情一区在线| 亚洲宅男天堂在线观看无病毒| 亚洲a一区二区| 国内精品视频一区二区三区八戒| 成人午夜在线视频| 欧美日韩一级视频| 久久久精品天堂| 香蕉加勒比综合久久| 国产麻豆一精品一av一免费 | 成人在线综合网站| 欧美体内she精高潮| 精品国产sm最大网站免费看| 国产欧美一区二区精品性色| 亚洲精品欧美激情| 九色综合国产一区二区三区| 99久久精品免费精品国产| 91精品欧美一区二区三区综合在| 久久久91精品国产一区二区精品| 伊人婷婷欧美激情| 国产精品亚洲а∨天堂免在线| 在线影视一区二区三区| 久久精品亚洲国产奇米99| 一区二区成人在线视频| 国产一区二区三区四区五区入口 | 欧美日韩成人激情| 国产精品国产馆在线真实露脸| 日日噜噜夜夜狠狠视频欧美人 | 精品福利一区二区三区免费视频| 中文字幕一区二区三| 免费欧美在线视频| 欧美在线影院一区二区| 国产精品丝袜黑色高跟| 国内精品不卡在线| 欧美一级一区二区| 亚洲影院在线观看| 91麻豆免费视频| 国产精品福利一区| 国产精品一区专区| 精品国产不卡一区二区三区| 日日噜噜夜夜狠狠视频欧美人| 色吧成人激情小说| 亚洲天堂a在线| 粉嫩蜜臀av国产精品网站| 久久久一区二区三区捆绑**| 蜜臀av国产精品久久久久| 欧美在线视频你懂得| 亚洲欧美日韩国产一区二区三区| 国产成人激情av| 久久久影院官网| 国产精品影视天天线| 久久久久久久久久久久久久久99 | 国产高清精品在线| www久久精品| 国内精品第一页| 国产丝袜在线精品| 成人永久看片免费视频天堂| 2020国产精品| 国产成人在线影院| 中文字幕一区免费在线观看| 成人精品免费看| 亚洲色图清纯唯美| 在线观看网站黄不卡| 亚洲国产裸拍裸体视频在线观看乱了| 在线一区二区三区四区| 亚洲永久精品大片| 欧美男生操女生| 久久国产福利国产秒拍| 久久网站最新地址| 97久久久精品综合88久久| 1区2区3区欧美| 欧美精品一二三| 激情偷乱视频一区二区三区| 欧美国产精品v| 91一区二区在线| 日韩精品亚洲一区二区三区免费| 精品国产乱码久久久久久图片| 国产成人精品亚洲午夜麻豆| 亚洲欧美成aⅴ人在线观看| 欧美日韩国产在线播放网站| 麻豆一区二区三| 中文字幕一区二区不卡| 欧美日本视频在线| 国产揄拍国内精品对白| 亚洲精选免费视频| 日韩欧美综合在线| av亚洲精华国产精华| 婷婷成人激情在线网| 久久久噜噜噜久噜久久综合| 99re这里只有精品6| 蜜桃传媒麻豆第一区在线观看| 国产日韩精品一区二区三区在线| 欧美午夜影院一区| 久草在线在线精品观看| 亚洲精品高清在线| 久久精品视频一区二区| 欧美日韩国产在线播放网站| 大陆成人av片| 麻豆精品在线看| 亚洲一区二区中文在线| 国产丝袜欧美中文另类| 欧美夫妻性生活| 99精品久久久久久| 久久99精品国产| 亚洲超碰97人人做人人爱| 国产精品丝袜黑色高跟| 日韩精品一区二区在线| 在线观看日韩精品| 成熟亚洲日本毛茸茸凸凹| 久久国产三级精品| 性久久久久久久久| 亚洲精品高清在线| 国产日韩精品一区二区浪潮av| 欧美美女直播网站| 欧美在线视频不卡| 91麻豆国产香蕉久久精品| 懂色av一区二区在线播放| 久久99精品视频| 日韩精品亚洲专区| 婷婷一区二区三区| 亚洲chinese男男1069| 一区二区三区免费| 一区二区三区四区不卡在线 | 日韩一区二区麻豆国产| 欧美特级限制片免费在线观看| 99久久精品国产观看| 国产福利一区在线观看| 国产精品亚洲人在线观看| 国内精品免费**视频| 激情欧美日韩一区二区| 国产一区二区三区美女| 久久99久久精品| 国产在线精品国自产拍免费| 精品午夜久久福利影院| 国产精品自拍网站| 国产成人自拍高清视频在线免费播放| 久久国产人妖系列| 狠狠色狠狠色合久久伊人| 久久99精品国产麻豆婷婷| 韩国三级电影一区二区| 精品一二线国产| 国产精品亚洲第一| 成人污视频在线观看| 99久久夜色精品国产网站| 91免费国产在线观看| 欧美三级电影精品| 日韩亚洲欧美高清| 精品电影一区二区三区| 精品国产精品网麻豆系列 | 中文字幕制服丝袜成人av| 中文字幕一区二区不卡| 一区二区在线看| 免费成人在线影院| 国产成人精品网址| 欧美三级三级三级| 欧美变态tickling挠脚心| 国产欧美一区二区精品性| 一区二区三区不卡在线观看| 亚洲成在人线在线播放| 国产一区二区三区在线看麻豆| 北条麻妃国产九九精品视频| 欧美三级中文字| 欧美精品一区二区三区四区| 一区二区中文视频| 婷婷一区二区三区| 懂色av中文字幕一区二区三区 | 成人av在线播放网址| 色狠狠一区二区三区香蕉| 日韩一级黄色大片| 国产精品理伦片| 免费在线一区观看| 91女神在线视频| 久久影院午夜论| 午夜视频一区在线观看| 成人伦理片在线| 欧美大胆人体bbbb|