Skip to content

Commit 0a0da29

Browse files
author
Rexdy
authored
Added Llinear Search, used Error-Set and 8 test cases. (#32)
* Added Selection Sort along with 9 test cases * Added Linear Search
1 parent d0be0a4 commit 0a0da29

4 files changed

Lines changed: 65 additions & 0 deletions

File tree

CONTRIBUTING.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ Every project is managed by the `build.zig` file.
3939
├── runall.sh
4040
├── search
4141
│ ├── binarySearchTree.zig
42+
│ ├── linearSearch.zig
4243
│ └── redBlackTrees.zig
4344
├── sort
4445
│ ├── bubbleSort.zig

build.zig

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,13 @@ pub fn build(b: *std.Build) void {
6565
.name = "redBlackTrees.zig",
6666
.category = "search",
6767
});
68+
if (std.mem.eql(u8, op, "search/linearSearch"))
69+
buildAlgorithm(b, .{
70+
.optimize = optimize,
71+
.target = target,
72+
.name = "linearSearch.zig",
73+
.category = "search",
74+
});
6875

6976
// Data Structures algorithms
7077
if (std.mem.eql(u8, op, "ds/trie"))

runall.zig

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ pub fn main() !void {
3838
// Search
3939
try runTest(allocator, "search/bSearchTree");
4040
try runTest(allocator, "search/rb");
41+
try runTest(allocator, "search/linearSearch");
4142

4243
// Threads
4344
try runTest(allocator, "threads/threadpool");

search/linearSearch.zig

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
const std = @import("std");
2+
const expect = std.testing.expect;
3+
const expectError = std.testing.expectError;
4+
5+
const searchErrors = error{KeyNotFound};
6+
7+
// returns the index of the first occurrence of key
8+
fn search(arr: []i32, key: i32) !usize {
9+
for (arr, 0..) |v, i| {
10+
if (v == key) {
11+
return i;
12+
}
13+
}
14+
return searchErrors.KeyNotFound;
15+
}
16+
17+
test "empty array" {
18+
var A = [_]i32{};
19+
try expectError(searchErrors.KeyNotFound, search(A[0..], 5));
20+
}
21+
22+
test "single element array, key not in array" {
23+
var A = [_]i32{2};
24+
try expectError(searchErrors.KeyNotFound, search(A[0..], 5));
25+
}
26+
27+
// to test off-by-one errors
28+
test "2 element array" {
29+
var A = [_]i32{ 2, 8 };
30+
try expect(try search(A[0..], 8) == 1);
31+
}
32+
33+
test "key at last" {
34+
var A = [_]i32{ 2, 3, 6, 0, 1, 7, 8, 9 };
35+
try expect(try search(A[0..], 9) == 7);
36+
}
37+
38+
test "key not in array" {
39+
var A = [_]i32{ 2, 3, 6, 0, 1, 7, 8, 9 };
40+
try expectError(searchErrors.KeyNotFound, search(A[0..], 5));
41+
}
42+
43+
test "duplicate elements in array" {
44+
var A = [_]i32{ 2, 3, 6, 0, 1, 7, 8, 1, 9 };
45+
try expect(try search(A[0..], 1) == 4);
46+
}
47+
48+
test "negative numbers" {
49+
var A = [_]i32{ 2, -3, 6, 0, 1, -7, 8, -1, 9 };
50+
try expect(try search(A[0..], -1) == 7);
51+
}
52+
53+
test "identical elements" {
54+
var A = [_]i32{ 0, 0, 0, 0, 0, 0, 0, 0 };
55+
try expect(try search(A[0..], 0) == 0);
56+
}

0 commit comments

Comments
 (0)