diff --git a/problems/power-of-four/power_of_four.go b/problems/power-of-four/power_of_four.go index e6609bef3..e577da873 100644 --- a/problems/power-of-four/power_of_four.go +++ b/problems/power-of-four/power_of_four.go @@ -1 +1,5 @@ package power_of_four + +func isPowerOfFour(num int) bool { + return num&(num-1) == 0 && num&0x55555555 > 0 +} diff --git a/problems/power-of-four/power_of_four_test.go b/problems/power-of-four/power_of_four_test.go index e6609bef3..54af0b0f3 100644 --- a/problems/power-of-four/power_of_four_test.go +++ b/problems/power-of-four/power_of_four_test.go @@ -1 +1,43 @@ package power_of_four + +import "testing" + +type caseType struct { + input int + expected bool +} + +func TestIsPowerOfFour(t *testing.T) { + tests := [...]caseType{ + { + input: 16, + expected: true, + }, + { + input: 5, + expected: false, + }, + { + input: 6, + expected: false, + }, + { + input: 12, + expected: false, + }, + { + input: 0, + expected: false, + }, + { + input: 1, + expected: true, + }, + } + for _, tc := range tests { + output := isPowerOfFour(tc.input) + if output != tc.expected { + t.Fatalf("input: %v, output: %v, expected: %v", tc.input, output, tc.expected) + } + } +}