如何使用Rust检测操作系统类型?我需要指定一个特定于操作系统的默认路径.应该使用条件编译吗?
例如:
#[cfg(target_os = "macos")]
static DEFAULT_PATH: &str = "path2";
#[cfg(target_os = "linux")]
static DEFAULT_PATH: &str = "path0";
#[cfg(target_os = "windows")]
static DEFAULT_PATH: &str = "path1";
Run Code Online (Sandbox Code Playgroud) 我正在为我的自定义StringDatatype编写单元测试,我需要写下4字节的unicode字符."\ U" - 不工作(非法转义字符错误)例如:U + 1F701(0xf0 0x9f 0x9c 0x81).如何用字符串写?
我正在尝试创建regexp以查找重复的逗号,如下所示:
baz(uint32,,bool)
Run Code Online (Sandbox Code Playgroud)
现在我的模式是: \w*\([\w\[\],?+]+\)
这是行不通的.
如何指定字符类中项目的数量?
像这样的东西:
let source = [0u8; 40];
let a = source[0..11];
let b = source[11..40];
Run Code Online (Sandbox Code Playgroud) 我想知道如何为特定的异常断言编写测试?
例如(我的测试数据容器):
@Parameters(name = "{index}: {0} > {1} > {2} > {3} > {4}")
public static Iterable<Object[]> data() {
return Arrays.asList(new Object[][] {
{"1200", new byte[] {0x4B0}, "1200", 16, 2},
{"10", new byte[] {0x0A}, "10", 8, 1},
{"13544k0", new byte[] {0x0A}, "1200", 8, 1}, <== assert thrown exception
{"132111115516", new byte[] {0x0A}, "1200", 8, 1},<== assert thrown exception
});
}
Run Code Online (Sandbox Code Playgroud)
是否可以使用这样的容器数据来断言异常,或者我需要在具体的测试方法中建模情况?
我需要重定向生成的子进程的输出。这是我尝试过但不起作用的方法:
Command::new(cmd)
.args(&["--testnet",
"--fast",
format!("&>> {}", log_path).as_str()])
.stdin(Stdio::piped())
.stdout(Stdio::inherit())
.spawn()
Run Code Online (Sandbox Code Playgroud) 我正在尝试切换ByteBuffer 的字节序,但没有任何影响。做错了什么?也许我的调试主要功能不正确?
@Override
public byte[] toBytes(BigDecimal type) {
int octets = getOctetsNumber();
BigInteger intVal = type.unscaledValue();
byte[] temp = intVal.toByteArray();
int addCount = octets - temp.length;
// DEBUG
ByteBuffer buffer = ByteBuffer.allocate(octets);
for(byte b: intVal.toByteArray()){
buffer.put(b);
}
if (addCount > 0){
for (; addCount > 0; addCount--) {
buffer.put((byte)0x00);
}
}
buffer.flip();
buffer.order( ByteOrder.BIG_ENDIAN);
return buffer.array();
}
public static void main(String[] arg) {
IntegerDatatype intVal = new IntegerDatatype(17);
BigDecimal bd = new BigDecimal(32000);
byte[] bytes = intVal.toBytes(bd); …
Run Code Online (Sandbox Code Playgroud) 我有Rust项目,包括集成测试(在/tests
dir中)和基准测试(在/benches
dir中).在测试和长凳中我需要一些实用功能,但它们与我的箱子本身无关,所以我不能把它们放在/utils
目录中.
处理这种情况的惯用方法是什么?
我按照rust-bindgen教程为scrypt C 库进行绑定。由于链接错误,我无法运行测试:
/home/user/project/rust-scrypt/src/lib.rs:32: undefined reference to `crypto_scrypt'
collect2: error: ld returned 1 exit status
Run Code Online (Sandbox Code Playgroud)
和我的测试:
include!(concat!(env!("OUT_DIR"), "/bindings.rs"));
// ...
// ...
#[test]
fn test_script() {
let mut kdf_salt = to_bytes("fd4acb81182a2c8fa959d180967b374277f2ccf2f7f401cb08d042cc785464b4");
let passwd = "1234567890";
let mut buf = [0u8; 32];
unsafe {
crypto_scrypt(passwd.as_ptr(), passwd.len(), kdf_salt.as_mut_ptr(), kdf_salt.len(),
2, 8, 1, buf.as_mut_ptr(), 32);
}
println!(">> DEBUG: {:?}", buf);
// "52a5dacfcf80e5111d2c7fbed177113a1b48a882b066a017f2c856086680fac7");
}
Run Code Online (Sandbox Code Playgroud)
绑定已生成并存在于bindings.rs
. 我不知道为什么链接器会抛出错误。
这是我的builds.rs
extern crate bindgen;
use std::env;
use std::path::PathBuf;
fn main() { …
Run Code Online (Sandbox Code Playgroud) 我试图将一个字节数组转换为long,但接收BufferUnderflowException
ByteBuffer buffer = ByteBuffer.allocate(Long.BYTES);
byte[] arg1 = new byte[] {0x04, (byte)0xB0};
buffer.put(arg1, 0, arg1.length);
buffer.flip();
long val = buffer.getLong();
Run Code Online (Sandbox Code Playgroud)
在调试模式下,我查看了缓冲区内部.它有一个内部字节数组,它用"0"填充未指定的字节.那为什么会发生异常?我该如何解决?
java ×5
rust ×5
arrays ×1
benchmarking ×1
endianness ×1
exception ×1
ffi ×1
io ×1
junit ×1
linker ×1
path ×1
process ×1
regex ×1
rust-cargo ×1
split ×1
testing ×1
unicode ×1
unit-testing ×1