File tree Expand file tree Collapse file tree 4 files changed +42
-2
lines changed Expand file tree Collapse file tree 4 files changed +42
-2
lines changed Original file line number Diff line number Diff line change @@ -120,7 +120,7 @@ void KleeConstraintsPrinter::genConstraintsForMultiPointerOrArray(const Constrai
120
120
std::vector<std::string> charSizes (indexes.begin (), indexes.end () - 1 );
121
121
const auto charElement = constrMultiIndex (state.curElement , charSizes);
122
122
ss << TAB_N () << " if (" << indexes.back () << PrinterUtils::EQ_OPERATOR << sizes.back () - 1 << " )" << LB ();
123
- ss << TAB_N () << charElement << " [" << sizes.back () - 1 << " ]" << PrinterUtils::ASSIGN_OPERATOR << " '\\ 0'" << SCNL;
123
+ ss << TAB_N () << PrinterUtils::KLEE_ASSUME << " ( " << charElement << " [" << sizes.back () - 1 << " ]" << PrinterUtils::EQ_OPERATOR << " '\\ 0'" << " ) " << SCNL;
124
124
ss << TAB_N () << " break" << SCNL;
125
125
ss << RB ();
126
126
}
Original file line number Diff line number Diff line change @@ -238,4 +238,34 @@ namespace {
238
238
239
239
ASSERT_TRUE (status.ok ()) << status.error_message ();
240
240
}
241
+
242
+ TEST_F (Regression_Test, Hash_Of_String) {
243
+ fs::path source = getTestFilePath (" GH215.c" );
244
+ auto [testGen, status] = createTestForFunction (source, 2 );
245
+
246
+ ASSERT_TRUE (status.ok ()) << status.error_message ();
247
+
248
+ auto predicate = [](const tests::Tests::MethodTestCase &testCase) {
249
+ auto s = testCase.paramValues [0 ].view ->getEntryValue (nullptr );
250
+ s = s.substr (1 , s.length () - 2 );
251
+ auto actual = testCase.returnValue .view ->getEntryValue (nullptr );
252
+ auto expected = std::to_string (std::accumulate (s.begin (), s.end (), 0 ));
253
+ return actual == expected;
254
+ };
255
+
256
+ checkTestCasePredicates (
257
+ testGen.tests .at (source).methods .begin ().value ().testCases ,
258
+ std::vector<TestCasePredicate>(
259
+ { [&predicate](const tests::Tests::MethodTestCase &testCase) {
260
+ // empty string
261
+ return testCase.paramValues [0 ].view ->getEntryValue (nullptr ).length () == 2 &&
262
+ predicate (testCase);
263
+ },
264
+ [&predicate](const tests::Tests::MethodTestCase &testCase) {
265
+ // non-empty string
266
+ return testCase.paramValues [0 ].view ->getEntryValue (nullptr ).length () > 2 &&
267
+ predicate (testCase);
268
+ } }),
269
+ " hash" );
270
+ }
241
271
}
Original file line number Diff line number Diff line change @@ -38,4 +38,6 @@ add_library(PR124 PR124.c)
38
38
39
39
add_library (PR153 PR153.c)
40
40
41
- set_target_properties (regression PROPERTIES LINK_WHAT_YOU_USE TRUE )
41
+ add_library (GH215 GH215.c)
42
+
43
+ set_target_properties (regression PROPERTIES LINK_WHAT_YOU_USE TRUE )
Original file line number Diff line number Diff line change
1
+ int hash (const char * s ) {
2
+ int h = 0 , i = 0 ;
3
+ while (s [i ] != '\0' ) {
4
+ h = (h + s [i ]);
5
+ i ++ ;
6
+ }
7
+ return h ;
8
+ }
You can’t perform that action at this time.
0 commit comments