diff --git a/problems/sum-of-two-integers/sum_of_two_integers.go b/problems/sum-of-two-integers/sum_of_two_integers.go index e6bbad8da..3bd4d0697 100644 --- a/problems/sum-of-two-integers/sum_of_two_integers.go +++ b/problems/sum-of-two-integers/sum_of_two_integers.go @@ -1 +1,8 @@ package sum_of_two_integers + +func getSum(a int, b int) int { + for b != 0 { + a, b = a^b, (a&b)<<1 + } + return a +} diff --git a/problems/sum-of-two-integers/sum_of_two_integers_test.go b/problems/sum-of-two-integers/sum_of_two_integers_test.go index e6bbad8da..07c1ab51f 100644 --- a/problems/sum-of-two-integers/sum_of_two_integers_test.go +++ b/problems/sum-of-two-integers/sum_of_two_integers_test.go @@ -1 +1,30 @@ package sum_of_two_integers + +import "testing" + +type caseType struct { + a int + b int + expected int +} + +func TestGetSum(t *testing.T) { + tests := [...]caseType{ + { + a: 1, + b: 2, + expected: 3, + }, + { + a: -2, + b: 3, + expected: 1, + }, + } + for _, tc := range tests { + output := getSum(tc.a, tc.b) + if output != tc.expected { + t.Fatalf("input: %v %v, output: %v, expected: %v", tc.a, tc.b, output, tc.expected) + } + } +}