aboutsummaryrefslogtreecommitdiff
path: root/src/string_immutable.zig
diff options
context:
space:
mode:
authorGravatar Jarred Sumner <jarred@jarredsumner.com> 2021-04-30 15:34:31 -0700
committerGravatar Jarred Sumner <jarred@jarredsumner.com> 2021-04-30 15:34:31 -0700
commit2961b7c8cac1033c1f039272038fe309e3fe6c01 (patch)
tree38f0b29a16099b1e1ff779d62208122a7b96f72e /src/string_immutable.zig
parentcb639afb57a8caf002a50ae5c0ecd42b8ddeb612 (diff)
downloadbun-2961b7c8cac1033c1f039272038fe309e3fe6c01.tar.gz
bun-2961b7c8cac1033c1f039272038fe309e3fe6c01.tar.zst
bun-2961b7c8cac1033c1f039272038fe309e3fe6c01.zip
inching closure
Former-commit-id: 107310d785ee9dfbd258a1fc015976a76cdcef82
Diffstat (limited to 'src/string_immutable.zig')
-rw-r--r--src/string_immutable.zig49
1 files changed, 49 insertions, 0 deletions
diff --git a/src/string_immutable.zig b/src/string_immutable.zig
index 95b1140c0..4c1e7c98a 100644
--- a/src/string_immutable.zig
+++ b/src/string_immutable.zig
@@ -239,6 +239,55 @@ pub fn containsNonBmpCodePointUTF16(_text: JavascriptString) bool {
return false;
}
+pub fn join(slices: []const string, delimiter: string, allocator: *std.mem.Allocator) !string {
+ return try std.mem.join(allocator, delimiter, slices);
+}
+
+pub fn cmpStringsAsc(ctx: void, a: string, b: string) bool {
+ return std.mem.order(u8, a, b) == .lt;
+}
+
+pub fn cmpStringsDesc(ctx: void, a: string, b: string) bool {
+ return std.mem.order(u8, a, b) == .gt;
+}
+
+const sort_asc = std.sort.asc(u8);
+const sort_desc = std.sort.desc(u8);
+
+pub fn sortAsc(in: []string) void {
+ std.sort.sort([]const u8, in, {}, cmpStringsAsc);
+}
+
+pub fn sortDesc(in: []string) void {
+ std.sort.sort([]const u8, in, {}, cmpStringsDesc);
+}
+
+test "join" {
+ var string_list = &[_]string{ "abc", "def", "123", "hello" };
+ const list = try join(string_list, "-", std.heap.page_allocator);
+ std.testing.expectEqualStrings("abc-def-123-hello", list);
+}
+
+test "sortAsc" {
+ var string_list = [_]string{ "abc", "def", "123", "hello" };
+ var sorted_string_list = [_]string{ "123", "abc", "def", "hello" };
+ var sorted_join = try join(&sorted_string_list, "-", std.heap.page_allocator);
+ sortAsc(&string_list);
+ var string_join = try join(&string_list, "-", std.heap.page_allocator);
+
+ std.testing.expectEqualStrings(sorted_join, string_join);
+}
+
+test "sortDesc" {
+ var string_list = [_]string{ "abc", "def", "123", "hello" };
+ var sorted_string_list = [_]string{ "hello", "def", "abc", "123" };
+ var sorted_join = try join(&sorted_string_list, "-", std.heap.page_allocator);
+ sortDesc(&string_list);
+ var string_join = try join(&string_list, "-", std.heap.page_allocator);
+
+ std.testing.expectEqualStrings(sorted_join, string_join);
+}
+
/// Super simple "perfect hash" algorithm
/// Only really useful for switching on strings
// TODO: can we auto detect and promote the underlying type?