// 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 } } }