| // Copyright 2012 The Go Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style |
| // license that can be found in the LICENSE file. |
| |
| package cgotest |
| |
| /* |
| // libgcc on ARM might be compiled as thumb code, but our 5l |
| // can't handle that, so we have to disable this test on arm. |
| #ifdef __ARMEL__ |
| #include <stdio.h> |
| int vabs(int x) { |
| puts("testLibgcc is disabled on ARM because 5l cannot handle thumb library."); |
| return (x < 0) ? -x : x; |
| } |
| #elif defined(__arm64__) && defined(__clang__) |
| #include <stdio.h> |
| int vabs(int x) { |
| puts("testLibgcc is disabled on ARM64 with clang due to lack of libgcc."); |
| return (x < 0) ? -x : x; |
| } |
| #else |
| int __absvsi2(int); // dummy prototype for libgcc function |
| // we shouldn't name the function abs, as gcc might use |
| // the builtin one. |
| int vabs(int x) { return __absvsi2(x); } |
| #endif |
| */ |
| import "C" |
| |
| import "testing" |
| |
| func testLibgcc(t *testing.T) { |
| var table = []struct { |
| in, out C.int |
| }{ |
| {0, 0}, |
| {1, 1}, |
| {-42, 42}, |
| {1000300, 1000300}, |
| {1 - 1<<31, 1<<31 - 1}, |
| } |
| for _, v := range table { |
| if o := C.vabs(v.in); o != v.out { |
| t.Fatalf("abs(%d) got %d, should be %d", v.in, o, v.out) |
| return |
| } |
| } |
| } |