diff --git a/pkgs/crc32c/cpu/cpu.go b/pkgs/crc32c/cpu/cpu.go index d3fed494a..4f7834cbe 100644 --- a/pkgs/crc32c/cpu/cpu.go +++ b/pkgs/crc32c/cpu/cpu.go @@ -5,14 +5,14 @@ package cpu // #include "cpu.h" import "C" -func HasSSE41() int { - return int(C.has_sse41()) +func HasSSE41() bool { + return int(C.has_sse41()) == 1 } -func HasAVX() int { - return int(C.has_avx()) +func HasAVX() bool { + return int(C.has_avx()) == 1 } -func HasAVX2() int { - return int(C.has_avx2()) +func HasAVX2() bool { + return int(C.has_avx2()) == 1 } diff --git a/pkgs/crc32c/cpu/cpu_test.go b/pkgs/crc32c/cpu/cpu_test.go index 06df00d0b..6676afd5e 100644 --- a/pkgs/crc32c/cpu/cpu_test.go +++ b/pkgs/crc32c/cpu/cpu_test.go @@ -1,8 +1,13 @@ package cpu import ( - . "gopkg.in/check.v1" + "errors" + "os/exec" + "runtime" + "strings" "testing" + + . "gopkg.in/check.v1" ) func Test(t *testing.T) { TestingT(t) } @@ -11,17 +16,47 @@ type MySuite struct{} var _ = Suite(&MySuite{}) +func hasCpuFeatureFromOS(feature string) (bool, error) { + if runtime.GOOS == "linux" { + command := exec.Command("/bin/cat", "/proc/cpuinfo") + output, err := command.Output() + if err != nil { + return false, err + } + if strings.Contains(string(output), feature) { + return true, nil + } else { + return false, nil + } + } else { + // TODO find new way to test cpu flags on windows + return false, errors.New("Not Implemented on this platform") + } +} + func (s *MySuite) TestHasSSE41(c *C) { - var bool = HasSSE41() - c.Check(bool, Equals, 1) + if runtime.GOOS == "linux" { + var flag = HasSSE41() + osCheck, err := hasCpuFeatureFromOS("sse4_1") + c.Assert(err, IsNil) + c.Check(flag, Equals, osCheck) + } } func (s *MySuite) TestHasAVX(c *C) { - var bool = HasAVX() - c.Check(bool, Equals, 1) + if runtime.GOOS == "linux" { + var flag = HasAVX() + osFlag, err := hasCpuFeatureFromOS("avx") + c.Assert(err, IsNil) + c.Check(osFlag, Equals, flag) + } } func (s *MySuite) TestHasAVX2(c *C) { - var bool = HasAVX2() - c.Check(bool, Equals, 0) + if runtime.GOOS == "linux" { + var flag = HasAVX2() + osFlag, err := hasCpuFeatureFromOS("avx2") + c.Assert(err, IsNil) + c.Check(osFlag, Equals, flag) + } }