hare

[hare] The Hare programming language
git clone https://git.torresjrjr.com/hare.git
Log | Files | Refs | README | LICENSE

contains.ha (1375B)


      1 // SPDX-License-Identifier: MPL-2.0
      2 // (c) Hare authors <https://harelang.org>
      3 
      4 // Returns true if a byte slice contains a byte or a sequence of bytes.
      5 export fn contains(haystack: []u8, needles: (u8 | []u8)...) bool = {
      6 	for (let i = 0z; i < len(needles); i += 1) {
      7 		const matched = match (needles[i]) {
      8 		case let b: u8 =>
      9 			yield index_byte(haystack, b) is size;
     10 		case let b: []u8 =>
     11 			yield index_slice(haystack, b) is size;
     12 		};
     13 		if (matched) {
     14 			return true;
     15 		};
     16 	};
     17 	return false;
     18 };
     19 
     20 // Returns true if "in" has the given prefix, false otherwise
     21 export fn hasprefix(in: []u8, prefix: []u8) bool = {
     22 	return len(in) >= len(prefix) && equal(in[..len(prefix)], prefix);
     23 };
     24 
     25 @test fn hasprefix() void = {
     26 	assert(hasprefix([], []));
     27 	assert(hasprefix([0], []));
     28 	assert(!hasprefix([], [0]));
     29 	assert(hasprefix([1, 2, 3], [1, 2]));
     30 	assert(!hasprefix([1, 2, 3], [1, 1]));
     31 	assert(!hasprefix([1, 2, 3], [1, 2, 3, 4]));
     32 };
     33 
     34 // Returns true if "in" has the given suffix, false otherwise
     35 export fn hassuffix(in: []u8, suffix: []u8) bool = {
     36 	return len(in) >= len(suffix)
     37 		&& equal(in[len(in) - len(suffix)..], suffix);
     38 };
     39 
     40 @test fn hassuffix() void = {
     41 	assert(hassuffix([], []));
     42 	assert(hassuffix([0], []));
     43 	assert(!hassuffix([], [0]));
     44 	assert(hassuffix([1, 2, 3], [2, 3]));
     45 	assert(!hassuffix([1, 2, 3], [2, 2]));
     46 	assert(hassuffix([1, 2, 3, 4], [2, 3, 4]));
     47 };