diff --git a/sakura_core/basis/CStrictInteger.h b/sakura_core/basis/CStrictInteger.h index 6cfa85674a..66a49f393f 100644 --- a/sakura_core/basis/CStrictInteger.h +++ b/sakura_core/basis/CStrictInteger.h @@ -31,6 +31,8 @@ #ifndef SAKURA_CSTRICTINTEGER_6F202774_0F82_4BB7_B107_37DE5443309E_H_ #define SAKURA_CSTRICTINTEGER_6F202774_0F82_4BB7_B107_37DE5443309E_H_ +#include "primitive.h" // for Int + //int以外の整数型もintにキャストして扱う #define STRICTINT_OTHER_TYPE_AS_INT(TYPE) \ Me& operator += (TYPE rhs) { return operator += ((int)rhs); } \ diff --git a/sakura_core/basis/SakuraBasis.h b/sakura_core/basis/SakuraBasis.h index ddfecd99b1..92a46eae1e 100644 --- a/sakura_core/basis/SakuraBasis.h +++ b/sakura_core/basis/SakuraBasis.h @@ -58,6 +58,7 @@ #else // -- -- 通常のintで単位型を定義 + #include "primitive.h" // for Int //ロジック単位 typedef int CLogicInt; diff --git a/sakura_core/mem/CNative.cpp b/sakura_core/mem/CNative.cpp index 7f6a2e7959..f707793d18 100644 --- a/sakura_core/mem/CNative.cpp +++ b/sakura_core/mem/CNative.cpp @@ -5,5 +5,5 @@ //! 空っぽにする void CNative::Clear() { - this->SetRawData("",0); + this->_GetMemory()->_SetRawLength(0); } diff --git a/tests/unittests/test-cnative.cpp b/tests/unittests/test-cnative.cpp new file mode 100644 index 0000000000..4c6b631361 --- /dev/null +++ b/tests/unittests/test-cnative.cpp @@ -0,0 +1,92 @@ +/*! @file */ +/* + Copyright (C) 2018-2019 Sakura Editor Organization + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; + you must not claim that you wrote the original software. + If you use this software in a product, an acknowledgment + in the product documentation would be appreciated but is + not required. + + 2. Altered source versions must be plainly marked as such, + and must not be misrepresented as being the original software. + + 3. This notice may not be removed or altered from any source + distribution. +*/ +#include +#include "mem/CNativeW.h" +#include "mem/CNativeA.h" + +/*! + CNativeW::Clear のデータサイズのクリアをテストする + + 1-1. 固定データを追加する + 1-2. バッファの状態を取得する + 1-3. バッファの状態をチェックする + + 2-1. CNativeW をクリアする + 2-2. クリア後のバッファの状態を取得する + 2-3. クリア後のバッファの状態をチェックする + + 3-1. 固定データを再追加する + 3-2. バッファの状態を取得する + 3-3. バッファの状態をチェックする +*/ +TEST(CNativeW, Clear) +{ + constexpr const WCHAR* fixedPatternStr = L"abc"; + constexpr const int fixedPatternLen = 3; + + CNativeW stringW; + + // 1-1. 固定データを追加する + + stringW.AppendString(fixedPatternStr); // 固定データを追加する + + // 1-2. バッファの状態を取得する + + auto orgCapacity = stringW.capacity(); // データ追加後にバッファサイズを取得する + auto orgLength = stringW.GetStringLength(); // Clear() 前にデータサイズを取得する + + // 1-3. バッファの状態をチェックする + + EXPECT_GT(orgCapacity, 0); // データ追加後のバッファサイズを確認する + EXPECT_EQ(orgLength, fixedPatternLen); // データ追加後のデータサイズを確認する + + // 2-1. CNativeW をクリアする + + stringW.Clear(); // CNativeW をクリアする + + // 2-2. クリア後のバッファの状態を取得する + + auto newCapacity = stringW.capacity(); // Clear() 後にバッファサイズを取得する + auto newLength = stringW.GetStringLength(); // Clear() 後にデータサイズを取得する + + // 2-3. クリア後のバッファの状態をチェックする + + EXPECT_EQ(orgCapacity, newCapacity); // Clear() 後にバッファサイズが変わっていないのを確認する + EXPECT_EQ(newLength, 0); // Clear() 後にデータが空なのを確認する + + // 3-1. 固定データを再追加する + + stringW.AppendString(fixedPatternStr); // Clear() 後に固定データを再追加する + + // 3-2. バッファの状態を取得する + + auto newCapacity2 = stringW.capacity(); // 再追加後にバッファサイズを取得する + auto newLength2 = stringW.GetStringLength(); // 再追加後にデータサイズを取得する + + // 3-3. バッファの状態をチェックする + + EXPECT_EQ(orgCapacity, newCapacity2); // 再追加後にバッファサイズが変わっていないのを確認する + EXPECT_EQ(newLength2, fixedPatternLen); // 再追加後にデータサイズを確認する +}