@@ -264,6 +264,8 @@ class TestPreprocessor : public TestFixture {
264
264
TEST_CASE (testMissingIncludeCheckConfig);
265
265
266
266
TEST_CASE (limitsDefines);
267
+
268
+ TEST_CASE (hashCalculation);
267
269
}
268
270
269
271
std::string getConfigsStr (const char filedata[], const char *arg = nullptr ) {
@@ -284,6 +286,16 @@ class TestPreprocessor : public TestFixture {
284
286
return ret;
285
287
}
286
288
289
+ std::size_t getHash (const char filedata[]) {
290
+ Settings settings;
291
+ Preprocessor preprocessor (settings, *this );
292
+ std::vector<std::string> files;
293
+ std::istringstream istr (filedata);
294
+ simplecpp::TokenList tokens (istr,files);
295
+ tokens.removeComments ();
296
+ return preprocessor.calculateHash (tokens, " " );
297
+ }
298
+
287
299
void Bug2190219 () {
288
300
const char filedata[] = " #ifdef __cplusplus\n "
289
301
" cpp\n "
@@ -2510,6 +2522,20 @@ class TestPreprocessor : public TestFixture {
2510
2522
" if ( l > $2147483647 ) { }\n "
2511
2523
" }" , actual);
2512
2524
}
2525
+
2526
+ void hashCalculation () {
2527
+ // #12383
2528
+ const char code[] = " int a;" ;
2529
+ const char code2[] = " int a;" ; // extra space
2530
+ const char code3[] = " \n\n int a;" ; // extra new line
2531
+
2532
+ ASSERT_EQUALS (getHash (code), getHash (code));
2533
+ ASSERT_EQUALS (getHash (code2), getHash (code2));
2534
+ ASSERT_EQUALS (getHash (code3), getHash (code3));
2535
+ ASSERT (getHash (code) != getHash (code2));
2536
+ ASSERT (getHash (code) != getHash (code3));
2537
+ ASSERT (getHash (code2) != getHash (code3));
2538
+ }
2513
2539
};
2514
2540
2515
2541
REGISTER_TEST (TestPreprocessor)
0 commit comments