From 28f6d4a63786a7e63bc5d3b66b1754a02b1b564d Mon Sep 17 00:00:00 2001 From: est31 Date: Sun, 1 Jan 2017 23:06:57 +0100 Subject: Add test for i128 ffi usage --- src/test/run-pass/i128-ffi.rs | 45 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 src/test/run-pass/i128-ffi.rs (limited to 'src/test') diff --git a/src/test/run-pass/i128-ffi.rs b/src/test/run-pass/i128-ffi.rs new file mode 100644 index 00000000000..3b5f4884d21 --- /dev/null +++ b/src/test/run-pass/i128-ffi.rs @@ -0,0 +1,45 @@ +// Copyright 2017 The Rust Project Developers. See the COPYRIGHT +// file at the top-level directory of this distribution and at +// http://rust-lang.org/COPYRIGHT. +// +// Licensed under the Apache License, Version 2.0 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +// ignore-stage0 +// ignore-stage1 + +// MSVC doesn't support 128 bit integers, and other Windows +// C compilers have very inconsistent views on how the ABI +// should look like. + +// ignore-windows + +// Ignore 32 bit targets: +// ignore-x86, ignore-arm + +#![feature(i128_type)] + +#[link(name = "rust_test_helpers", kind = "static")] +extern "C" { + fn identity(f: u128) -> u128; + fn square(f: i128) -> i128; + fn sub(f: i128, f: i128) -> i128; +} + +fn main() { + unsafe { + let a = 0x734C_C2F2_A521; + let b = 0x33EE_0E2A_54E2_59DA_A0E7_8E41; + let b_out = identity(b); + assert_eq!(b, b_out); + let a_square = square(a); + assert_eq!(b, a_square as u128); + let k = 0x1234_5678_9ABC_DEFF_EDCB_A987_6543_210; + let k_d = 0x2468_ACF1_3579_BDFF_DB97_530E_CA86_420; + let k_out = sub(k_d, k); + assert_eq!(k, k_out); + } +} -- cgit 1.4.1-3-g733a5