Skip to content

Commit 3539989

Browse files
authored
Merge pull request #44 from tstraus13/master
Feature: Implement includes
2 parents 9ce0b13 + db0c9e3 commit 3539989

File tree

2 files changed

+55
-0
lines changed

2 files changed

+55
-0
lines changed

zig-string-tests.zig

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -280,3 +280,24 @@ test "toCapitalized Tests" {
280280

281281
try expectEqualStrings(myString.str(), "Love And Be Loved");
282282
}
283+
284+
test "includes Tests" {
285+
var myString = try String.init_with_contents(std.testing.allocator, "love and be loved");
286+
defer myString.deinit();
287+
288+
var needle = try String.init_with_contents(std.testing.allocator, "be");
289+
defer needle.deinit();
290+
291+
try expect(myString.includesLiteral("and"));
292+
try expect(myString.includesString(needle));
293+
294+
try needle.concat("t");
295+
296+
try expect(myString.includesLiteral("tiger") == false);
297+
try expect(myString.includesString(needle) == false);
298+
299+
needle.clear();
300+
301+
try expect(myString.includesLiteral("") == false);
302+
try expect(myString.includesString(needle) == false);
303+
}

zig-string.zig

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -606,4 +606,38 @@ pub const String = struct {
606606
}
607607
return false;
608608
}
609+
610+
/// Checks if the needle String is within the source String
611+
pub fn includesString(self: *String, needle: String) bool {
612+
613+
if (self.size == 0 or needle.size == 0) return false;
614+
615+
if (self.buffer) |buffer| {
616+
if (needle.buffer) |needle_buffer| {
617+
const found_index = std.mem.indexOf(u8, buffer[0..self.size], needle_buffer[0..needle.size]);
618+
619+
if (found_index == null) return false;
620+
621+
return true;
622+
}
623+
}
624+
625+
return false;
626+
}
627+
628+
/// Checks if the needle literal is within the source String
629+
pub fn includesLiteral(self: *String, needle: []const u8) bool {
630+
631+
if (self.size == 0 or needle.len == 0) return false;
632+
633+
if (self.buffer) |buffer| {
634+
const found_index = std.mem.indexOf(u8, buffer[0..self.size], needle);
635+
636+
if (found_index == null) return false;
637+
638+
return true;
639+
}
640+
641+
return false;
642+
}
609643
};

0 commit comments

Comments
 (0)