mirror of
https://github.com/ProvableHQ/leo.git
synced 2024-09-11 05:45:30 +03:00
test u8, u16, u32, u64
This commit is contained in:
parent
c72cf61ad2
commit
e564822a75
@ -67,10 +67,10 @@ macro_rules! test_uint {
|
||||
let r1: $_type = rand::random();
|
||||
let r2: $_type = rand::random();
|
||||
|
||||
let sum = r1.wrapping_sub(r2);
|
||||
let difference = r1.wrapping_sub(r2);
|
||||
|
||||
let cs = TestConstraintSystem::<Fq>::new();
|
||||
let sum_allocated = <$gadget>::alloc(cs, || Ok(sum)).unwrap();
|
||||
let difference_allocated = <$gadget>::alloc(cs, || Ok(difference)).unwrap();
|
||||
|
||||
let mut program = compile_program($directory, "sub.leo").unwrap();
|
||||
program.set_inputs(vec![
|
||||
@ -78,7 +78,7 @@ macro_rules! test_uint {
|
||||
Some(InputValue::Integer(r2 as usize)),
|
||||
]);
|
||||
|
||||
output_expected_allocated(program, sum_allocated);
|
||||
output_expected_allocated(program, difference_allocated);
|
||||
}
|
||||
}
|
||||
|
||||
@ -87,10 +87,10 @@ macro_rules! test_uint {
|
||||
let r1: $_type = rand::random();
|
||||
let r2: $_type = rand::random();
|
||||
|
||||
let sum = r1.wrapping_mul(r2);
|
||||
let product = r1.wrapping_mul(r2);
|
||||
|
||||
let cs = TestConstraintSystem::<Fq>::new();
|
||||
let sum_allocated = <$gadget>::alloc(cs, || Ok(sum)).unwrap();
|
||||
let product_allocated = <$gadget>::alloc(cs, || Ok(product)).unwrap();
|
||||
|
||||
let mut program = compile_program($directory, "mul.leo").unwrap();
|
||||
program.set_inputs(vec![
|
||||
@ -98,7 +98,7 @@ macro_rules! test_uint {
|
||||
Some(InputValue::Integer(r2 as usize)),
|
||||
]);
|
||||
|
||||
output_expected_allocated(program, sum_allocated);
|
||||
output_expected_allocated(program, product_allocated);
|
||||
}
|
||||
}
|
||||
|
||||
@ -107,10 +107,10 @@ macro_rules! test_uint {
|
||||
let r1: $_type = rand::random();
|
||||
let r2: $_type = rand::random();
|
||||
|
||||
let sum = r1.wrapping_div(r2);
|
||||
let quotient = r1.wrapping_div(r2);
|
||||
|
||||
let cs = TestConstraintSystem::<Fq>::new();
|
||||
let sum_allocated = <$gadget>::alloc(cs, || Ok(sum)).unwrap();
|
||||
let quotient_allocated = <$gadget>::alloc(cs, || Ok(quotient)).unwrap();
|
||||
|
||||
let mut program = compile_program($directory, "div.leo").unwrap();
|
||||
program.set_inputs(vec![
|
||||
@ -118,28 +118,29 @@ macro_rules! test_uint {
|
||||
Some(InputValue::Integer(r2 as usize)),
|
||||
]);
|
||||
|
||||
output_expected_allocated(program, sum_allocated);
|
||||
output_expected_allocated(program, quotient_allocated);
|
||||
}
|
||||
}
|
||||
|
||||
fn test_pow() {
|
||||
for _ in 0..10 {
|
||||
let r1: $_type = rand::random();
|
||||
let r2: $_type = rand::random();
|
||||
// for _ in 0..10 {// these loops take an excessive amount of time
|
||||
let r1: $_type = rand::random();
|
||||
let r2: $_type = rand::random();
|
||||
let r2 = r2 as u32; // we cast to u32 here because of rust pow() requirements
|
||||
|
||||
let sum = r1.wrapping_pow(r2 as u32);
|
||||
let result = r1.wrapping_pow(r2);
|
||||
|
||||
let cs = TestConstraintSystem::<Fq>::new();
|
||||
let sum_allocated = <$gadget>::alloc(cs, || Ok(sum)).unwrap();
|
||||
let cs = TestConstraintSystem::<Fq>::new();
|
||||
let result_allocated = <$gadget>::alloc(cs, || Ok(result)).unwrap();
|
||||
|
||||
let mut program = compile_program($directory, "pow.leo").unwrap();
|
||||
program.set_inputs(vec![
|
||||
Some(InputValue::Integer(r1 as usize)),
|
||||
Some(InputValue::Integer(r2 as usize)),
|
||||
]);
|
||||
let mut program = compile_program($directory, "pow.leo").unwrap();
|
||||
program.set_inputs(vec![
|
||||
Some(InputValue::Integer(r1 as usize)),
|
||||
Some(InputValue::Integer(r2 as usize)),
|
||||
]);
|
||||
|
||||
output_expected_allocated(program, sum_allocated);
|
||||
}
|
||||
output_expected_allocated(program, result_allocated);
|
||||
// }
|
||||
}
|
||||
|
||||
fn test_eq() {
|
||||
|
@ -1,6 +1,8 @@
|
||||
#[macro_use]
|
||||
pub mod macros;
|
||||
pub use self::macros::*;
|
||||
|
||||
use crate::{get_error, EdwardsTestCompiler};
|
||||
use leo_compiler::errors::{CompilerError, FunctionError, IntegerError};
|
||||
|
||||
pub trait IntegerTester {
|
||||
/// Tests use of the integer in a function input
|
||||
@ -43,6 +45,27 @@ pub trait IntegerTester {
|
||||
fn test_ternary();
|
||||
}
|
||||
|
||||
pub(crate) fn fail_integer(program: EdwardsTestCompiler) {
|
||||
match get_error(program) {
|
||||
CompilerError::FunctionError(FunctionError::IntegerError(
|
||||
IntegerError::InvalidInteger(_string),
|
||||
)) => {}
|
||||
error => panic!("Expected invalid boolean error, got {}", error),
|
||||
}
|
||||
}
|
||||
|
||||
pub(crate) fn fail_synthesis(program: EdwardsTestCompiler) {
|
||||
match get_error(program) {
|
||||
CompilerError::FunctionError(FunctionError::IntegerError(
|
||||
IntegerError::SynthesisError(_string),
|
||||
)) => {}
|
||||
error => panic!("Expected synthesis error, got {}", error),
|
||||
}
|
||||
}
|
||||
|
||||
// must be below macro definitions!
|
||||
// pub mod u8;
|
||||
pub mod u16;
|
||||
pub mod u32;
|
||||
pub mod u64;
|
||||
pub mod u8;
|
||||
// pub mod u128;
|
||||
|
3
compiler/tests/integer/u128/add.leo
Normal file
3
compiler/tests/integer/u128/add.leo
Normal file
@ -0,0 +1,3 @@
|
||||
function main(a: u128, b: u128) -> u128 {
|
||||
return a + b
|
||||
}
|
3
compiler/tests/integer/u128/assert_eq.leo
Normal file
3
compiler/tests/integer/u128/assert_eq.leo
Normal file
@ -0,0 +1,3 @@
|
||||
function main(a: u128, b: u128) {
|
||||
assert_eq!(a, b);
|
||||
}
|
3
compiler/tests/integer/u128/div.leo
Normal file
3
compiler/tests/integer/u128/div.leo
Normal file
@ -0,0 +1,3 @@
|
||||
function main(a: u128, b: u128) -> u128 {
|
||||
return a / b
|
||||
}
|
3
compiler/tests/integer/u128/eq.leo
Normal file
3
compiler/tests/integer/u128/eq.leo
Normal file
@ -0,0 +1,3 @@
|
||||
function main(a: u128, b: u128) -> bool {
|
||||
return a == b
|
||||
}
|
3
compiler/tests/integer/u128/ge.leo
Normal file
3
compiler/tests/integer/u128/ge.leo
Normal file
@ -0,0 +1,3 @@
|
||||
function main(a: u128, b: u128) -> bool {
|
||||
return a >= b
|
||||
}
|
3
compiler/tests/integer/u128/gt.leo
Normal file
3
compiler/tests/integer/u128/gt.leo
Normal file
@ -0,0 +1,3 @@
|
||||
function main(a: u128, b: u128) -> bool {
|
||||
return a > b
|
||||
}
|
3
compiler/tests/integer/u128/input.leo
Normal file
3
compiler/tests/integer/u128/input.leo
Normal file
@ -0,0 +1,3 @@
|
||||
function main(x: u128) -> u128 {
|
||||
return x
|
||||
}
|
3
compiler/tests/integer/u128/le.leo
Normal file
3
compiler/tests/integer/u128/le.leo
Normal file
@ -0,0 +1,3 @@
|
||||
function main(a: u128, b: u128) -> bool {
|
||||
return a <= b
|
||||
}
|
3
compiler/tests/integer/u128/lt.leo
Normal file
3
compiler/tests/integer/u128/lt.leo
Normal file
@ -0,0 +1,3 @@
|
||||
function main(a: u128, b: u128) -> bool {
|
||||
return a < b
|
||||
}
|
3
compiler/tests/integer/u128/max.leo
Normal file
3
compiler/tests/integer/u128/max.leo
Normal file
@ -0,0 +1,3 @@
|
||||
function main() -> u128 {
|
||||
return 340282366920938463463374607431768211455
|
||||
}
|
3
compiler/tests/integer/u128/min.leo
Normal file
3
compiler/tests/integer/u128/min.leo
Normal file
@ -0,0 +1,3 @@
|
||||
function main() -> u128 {
|
||||
return 0
|
||||
}
|
53
compiler/tests/integer/u128/mod.rs
Normal file
53
compiler/tests/integer/u128/mod.rs
Normal file
@ -0,0 +1,53 @@
|
||||
// use crate::{
|
||||
// boolean::{output_expected_boolean, output_false, output_true},
|
||||
// compile_program, get_output,
|
||||
// integer::{fail_integer, fail_synthesis, IntegerTester},
|
||||
// EdwardsConstrainedValue, EdwardsTestCompiler,
|
||||
// };
|
||||
// use leo_compiler::{
|
||||
// types::Integer,
|
||||
// ConstrainedValue, InputValue,
|
||||
// };
|
||||
//
|
||||
// use snarkos_curves::edwards_bls12::Fq;
|
||||
// use snarkos_models::gadgets::r1cs::TestConstraintSystem;
|
||||
// use snarkos_models::gadgets::utilities::{alloc::AllocGadget, uint::UInt128};
|
||||
//
|
||||
// const DIRECTORY_NAME: &str = "tests/integer/u128/";
|
||||
//
|
||||
// fn output_expected_allocated(program: EdwardsTestCompiler, expected: UInt128) {
|
||||
// let output = get_output(program);
|
||||
//
|
||||
// match output {
|
||||
// EdwardsConstrainedValue::Return(vec) => match vec.as_slice() {
|
||||
// [ConstrainedValue::Integer(Integer::U128(actual))] => assert_eq!(*actual, expected),
|
||||
// _ => panic!("program output unknown return value"),
|
||||
// },
|
||||
// _ => panic!("program output unknown return value"),
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// #[test]
|
||||
// fn test_u128() {
|
||||
// test_uint!(TestU128, u128, UInt128, DIRECTORY_NAME);
|
||||
//
|
||||
// TestU128::test_min(std::u128::MIN);
|
||||
// TestU128::test_max(std::u128::MAX);
|
||||
//
|
||||
// TestU128::test_input();
|
||||
//
|
||||
// TestU128::test_add();
|
||||
// // TestU128::test_sub(); //Todo: Catch subtraction overflow error in gadget
|
||||
// TestU128::test_mul();
|
||||
// TestU128::test_div();
|
||||
// TestU128::test_pow(); // takes about 10 minutes
|
||||
//
|
||||
// TestU128::test_eq();
|
||||
// TestU128::test_ge();
|
||||
// TestU128::test_gt();
|
||||
// TestU128::test_le();
|
||||
// TestU128::test_gt();
|
||||
//
|
||||
// TestU128::test_assert_eq();
|
||||
// TestU128::test_ternary();
|
||||
// }
|
3
compiler/tests/integer/u128/mul.leo
Normal file
3
compiler/tests/integer/u128/mul.leo
Normal file
@ -0,0 +1,3 @@
|
||||
function main(a: u128, b: u128) -> u128 {
|
||||
return a * b
|
||||
}
|
3
compiler/tests/integer/u128/one.leo
Normal file
3
compiler/tests/integer/u128/one.leo
Normal file
@ -0,0 +1,3 @@
|
||||
function main() -> u128 {
|
||||
return 1
|
||||
}
|
3
compiler/tests/integer/u128/pow.leo
Normal file
3
compiler/tests/integer/u128/pow.leo
Normal file
@ -0,0 +1,3 @@
|
||||
function main(a: u128, b: u128) -> u128 {
|
||||
return a ** b
|
||||
}
|
3
compiler/tests/integer/u128/sub.leo
Normal file
3
compiler/tests/integer/u128/sub.leo
Normal file
@ -0,0 +1,3 @@
|
||||
function main(a: u128, b: u128) -> u128 {
|
||||
return a - b
|
||||
}
|
3
compiler/tests/integer/u128/ternary.leo
Normal file
3
compiler/tests/integer/u128/ternary.leo
Normal file
@ -0,0 +1,3 @@
|
||||
function main(b: bool, x: u128, y: u128) -> u128 {
|
||||
return if b ? x : y
|
||||
}
|
3
compiler/tests/integer/u128/zero.leo
Normal file
3
compiler/tests/integer/u128/zero.leo
Normal file
@ -0,0 +1,3 @@
|
||||
function main() -> u128 {
|
||||
return 0
|
||||
}
|
3
compiler/tests/integer/u16/add.leo
Normal file
3
compiler/tests/integer/u16/add.leo
Normal file
@ -0,0 +1,3 @@
|
||||
function main(a: u16, b: u16) -> u16 {
|
||||
return a + b
|
||||
}
|
3
compiler/tests/integer/u16/assert_eq.leo
Normal file
3
compiler/tests/integer/u16/assert_eq.leo
Normal file
@ -0,0 +1,3 @@
|
||||
function main(a: u16, b: u16) {
|
||||
assert_eq!(a, b);
|
||||
}
|
3
compiler/tests/integer/u16/div.leo
Normal file
3
compiler/tests/integer/u16/div.leo
Normal file
@ -0,0 +1,3 @@
|
||||
function main(a: u16, b: u16) -> u16 {
|
||||
return a / b
|
||||
}
|
3
compiler/tests/integer/u16/eq.leo
Normal file
3
compiler/tests/integer/u16/eq.leo
Normal file
@ -0,0 +1,3 @@
|
||||
function main(a: u16, b: u16) -> bool {
|
||||
return a == b
|
||||
}
|
3
compiler/tests/integer/u16/ge.leo
Normal file
3
compiler/tests/integer/u16/ge.leo
Normal file
@ -0,0 +1,3 @@
|
||||
function main(a: u16, b: u16) -> bool {
|
||||
return a >= b
|
||||
}
|
3
compiler/tests/integer/u16/gt.leo
Normal file
3
compiler/tests/integer/u16/gt.leo
Normal file
@ -0,0 +1,3 @@
|
||||
function main(a: u16, b: u16) -> bool {
|
||||
return a > b
|
||||
}
|
3
compiler/tests/integer/u16/input.leo
Normal file
3
compiler/tests/integer/u16/input.leo
Normal file
@ -0,0 +1,3 @@
|
||||
function main(x: u16) -> u16 {
|
||||
return x
|
||||
}
|
3
compiler/tests/integer/u16/le.leo
Normal file
3
compiler/tests/integer/u16/le.leo
Normal file
@ -0,0 +1,3 @@
|
||||
function main(a: u16, b: u16) -> bool {
|
||||
return a <= b
|
||||
}
|
3
compiler/tests/integer/u16/lt.leo
Normal file
3
compiler/tests/integer/u16/lt.leo
Normal file
@ -0,0 +1,3 @@
|
||||
function main(a: u16, b: u16) -> bool {
|
||||
return a < b
|
||||
}
|
3
compiler/tests/integer/u16/max.leo
Normal file
3
compiler/tests/integer/u16/max.leo
Normal file
@ -0,0 +1,3 @@
|
||||
function main() -> u16 {
|
||||
return 65535
|
||||
}
|
3
compiler/tests/integer/u16/min.leo
Normal file
3
compiler/tests/integer/u16/min.leo
Normal file
@ -0,0 +1,3 @@
|
||||
function main() -> u16 {
|
||||
return 0
|
||||
}
|
50
compiler/tests/integer/u16/mod.rs
Normal file
50
compiler/tests/integer/u16/mod.rs
Normal file
@ -0,0 +1,50 @@
|
||||
use crate::{
|
||||
boolean::{output_expected_boolean, output_false, output_true},
|
||||
compile_program, get_output,
|
||||
integer::{fail_integer, fail_synthesis, IntegerTester},
|
||||
EdwardsConstrainedValue, EdwardsTestCompiler,
|
||||
};
|
||||
use leo_compiler::{types::Integer, ConstrainedValue, InputValue};
|
||||
|
||||
use snarkos_curves::edwards_bls12::Fq;
|
||||
use snarkos_models::gadgets::r1cs::TestConstraintSystem;
|
||||
use snarkos_models::gadgets::utilities::{alloc::AllocGadget, uint::UInt16};
|
||||
|
||||
const DIRECTORY_NAME: &str = "tests/integer/u16/";
|
||||
|
||||
fn output_expected_allocated(program: EdwardsTestCompiler, expected: UInt16) {
|
||||
let output = get_output(program);
|
||||
|
||||
match output {
|
||||
EdwardsConstrainedValue::Return(vec) => match vec.as_slice() {
|
||||
[ConstrainedValue::Integer(Integer::U16(actual))] => assert_eq!(*actual, expected),
|
||||
_ => panic!("program output unknown return value"),
|
||||
},
|
||||
_ => panic!("program output unknown return value"),
|
||||
}
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_u16() {
|
||||
test_uint!(Testu16, u16, UInt16, DIRECTORY_NAME);
|
||||
|
||||
Testu16::test_min(std::u16::MIN);
|
||||
Testu16::test_max(std::u16::MAX);
|
||||
|
||||
Testu16::test_input();
|
||||
|
||||
Testu16::test_add();
|
||||
// Testu16::test_sub(); //Todo: Catch subtraction overflow error in gadget
|
||||
Testu16::test_mul();
|
||||
Testu16::test_div();
|
||||
Testu16::test_pow();
|
||||
|
||||
Testu16::test_eq();
|
||||
Testu16::test_ge();
|
||||
Testu16::test_gt();
|
||||
Testu16::test_le();
|
||||
Testu16::test_gt();
|
||||
|
||||
Testu16::test_assert_eq();
|
||||
Testu16::test_ternary();
|
||||
}
|
3
compiler/tests/integer/u16/mul.leo
Normal file
3
compiler/tests/integer/u16/mul.leo
Normal file
@ -0,0 +1,3 @@
|
||||
function main(a: u16, b: u16) -> u16 {
|
||||
return a * b
|
||||
}
|
3
compiler/tests/integer/u16/one.leo
Normal file
3
compiler/tests/integer/u16/one.leo
Normal file
@ -0,0 +1,3 @@
|
||||
function main() -> u16 {
|
||||
return 1
|
||||
}
|
3
compiler/tests/integer/u16/pow.leo
Normal file
3
compiler/tests/integer/u16/pow.leo
Normal file
@ -0,0 +1,3 @@
|
||||
function main(a: u16, b: u16) -> u16 {
|
||||
return a ** b
|
||||
}
|
3
compiler/tests/integer/u16/sub.leo
Normal file
3
compiler/tests/integer/u16/sub.leo
Normal file
@ -0,0 +1,3 @@
|
||||
function main(a: u16, b: u16) -> u16 {
|
||||
return a - b
|
||||
}
|
3
compiler/tests/integer/u16/ternary.leo
Normal file
3
compiler/tests/integer/u16/ternary.leo
Normal file
@ -0,0 +1,3 @@
|
||||
function main(b: bool, x: u16, y: u16) -> u16 {
|
||||
return if b ? x : y
|
||||
}
|
3
compiler/tests/integer/u16/zero.leo
Normal file
3
compiler/tests/integer/u16/zero.leo
Normal file
@ -0,0 +1,3 @@
|
||||
function main() -> u16 {
|
||||
return 0
|
||||
}
|
@ -1,14 +1,10 @@
|
||||
use crate::{
|
||||
boolean::{output_expected_boolean, output_false, output_true},
|
||||
compile_program, get_error, get_output,
|
||||
integer::IntegerTester,
|
||||
compile_program, get_output,
|
||||
integer::{fail_integer, fail_synthesis, IntegerTester},
|
||||
EdwardsConstrainedValue, EdwardsTestCompiler,
|
||||
};
|
||||
use leo_compiler::{
|
||||
errors::{CompilerError, FunctionError, IntegerError},
|
||||
types::Integer,
|
||||
ConstrainedValue, InputValue,
|
||||
};
|
||||
use leo_compiler::{types::Integer, ConstrainedValue, InputValue};
|
||||
|
||||
use snarkos_curves::edwards_bls12::Fq;
|
||||
use snarkos_models::gadgets::r1cs::TestConstraintSystem;
|
||||
@ -50,24 +46,6 @@ pub(crate) fn output_one(program: EdwardsTestCompiler) {
|
||||
)
|
||||
}
|
||||
|
||||
fn fail_integer(program: EdwardsTestCompiler) {
|
||||
match get_error(program) {
|
||||
CompilerError::FunctionError(FunctionError::IntegerError(
|
||||
IntegerError::InvalidInteger(_string),
|
||||
)) => {}
|
||||
error => panic!("Expected invalid boolean error, got {}", error),
|
||||
}
|
||||
}
|
||||
|
||||
fn fail_synthesis(program: EdwardsTestCompiler) {
|
||||
match get_error(program) {
|
||||
CompilerError::FunctionError(FunctionError::IntegerError(
|
||||
IntegerError::SynthesisError(_string),
|
||||
)) => {}
|
||||
error => panic!("Expected synthesis error, got {}", error),
|
||||
}
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_u32() {
|
||||
test_uint!(TestU32, u32, UInt32, DIRECTORY_NAME);
|
||||
@ -81,7 +59,7 @@ fn test_u32() {
|
||||
// TestU32::test_sub(); //Todo: Catch subtraction overflow error in gadget
|
||||
TestU32::test_mul();
|
||||
TestU32::test_div();
|
||||
TestU32::test_pow();
|
||||
TestU32::test_pow(); // takes about 2 mins
|
||||
|
||||
TestU32::test_eq();
|
||||
TestU32::test_ge();
|
||||
|
3
compiler/tests/integer/u64/add.leo
Normal file
3
compiler/tests/integer/u64/add.leo
Normal file
@ -0,0 +1,3 @@
|
||||
function main(a: u64, b: u64) -> u64 {
|
||||
return a + b
|
||||
}
|
3
compiler/tests/integer/u64/assert_eq.leo
Normal file
3
compiler/tests/integer/u64/assert_eq.leo
Normal file
@ -0,0 +1,3 @@
|
||||
function main(a: u64, b: u64) {
|
||||
assert_eq!(a, b);
|
||||
}
|
3
compiler/tests/integer/u64/div.leo
Normal file
3
compiler/tests/integer/u64/div.leo
Normal file
@ -0,0 +1,3 @@
|
||||
function main(a: u64, b: u64) -> u64 {
|
||||
return a / b
|
||||
}
|
3
compiler/tests/integer/u64/eq.leo
Normal file
3
compiler/tests/integer/u64/eq.leo
Normal file
@ -0,0 +1,3 @@
|
||||
function main(a: u64, b: u64) -> bool {
|
||||
return a == b
|
||||
}
|
3
compiler/tests/integer/u64/ge.leo
Normal file
3
compiler/tests/integer/u64/ge.leo
Normal file
@ -0,0 +1,3 @@
|
||||
function main(a: u64, b: u64) -> bool {
|
||||
return a >= b
|
||||
}
|
3
compiler/tests/integer/u64/gt.leo
Normal file
3
compiler/tests/integer/u64/gt.leo
Normal file
@ -0,0 +1,3 @@
|
||||
function main(a: u64, b: u64) -> bool {
|
||||
return a > b
|
||||
}
|
3
compiler/tests/integer/u64/input.leo
Normal file
3
compiler/tests/integer/u64/input.leo
Normal file
@ -0,0 +1,3 @@
|
||||
function main(x: u64) -> u64 {
|
||||
return x
|
||||
}
|
3
compiler/tests/integer/u64/le.leo
Normal file
3
compiler/tests/integer/u64/le.leo
Normal file
@ -0,0 +1,3 @@
|
||||
function main(a: u64, b: u64) -> bool {
|
||||
return a <= b
|
||||
}
|
3
compiler/tests/integer/u64/lt.leo
Normal file
3
compiler/tests/integer/u64/lt.leo
Normal file
@ -0,0 +1,3 @@
|
||||
function main(a: u64, b: u64) -> bool {
|
||||
return a < b
|
||||
}
|
3
compiler/tests/integer/u64/max.leo
Normal file
3
compiler/tests/integer/u64/max.leo
Normal file
@ -0,0 +1,3 @@
|
||||
function main() -> u64 {
|
||||
return 18446744073709551615
|
||||
}
|
3
compiler/tests/integer/u64/min.leo
Normal file
3
compiler/tests/integer/u64/min.leo
Normal file
@ -0,0 +1,3 @@
|
||||
function main() -> u64 {
|
||||
return 0
|
||||
}
|
50
compiler/tests/integer/u64/mod.rs
Normal file
50
compiler/tests/integer/u64/mod.rs
Normal file
@ -0,0 +1,50 @@
|
||||
use crate::{
|
||||
boolean::{output_expected_boolean, output_false, output_true},
|
||||
compile_program, get_output,
|
||||
integer::{fail_integer, fail_synthesis, IntegerTester},
|
||||
EdwardsConstrainedValue, EdwardsTestCompiler,
|
||||
};
|
||||
use leo_compiler::{types::Integer, ConstrainedValue, InputValue};
|
||||
|
||||
use snarkos_curves::edwards_bls12::Fq;
|
||||
use snarkos_models::gadgets::r1cs::TestConstraintSystem;
|
||||
use snarkos_models::gadgets::utilities::{alloc::AllocGadget, uint::UInt64};
|
||||
|
||||
const DIRECTORY_NAME: &str = "tests/integer/u64/";
|
||||
|
||||
fn output_expected_allocated(program: EdwardsTestCompiler, expected: UInt64) {
|
||||
let output = get_output(program);
|
||||
|
||||
match output {
|
||||
EdwardsConstrainedValue::Return(vec) => match vec.as_slice() {
|
||||
[ConstrainedValue::Integer(Integer::U64(actual))] => assert_eq!(*actual, expected),
|
||||
_ => panic!("program output unknown return value"),
|
||||
},
|
||||
_ => panic!("program output unknown return value"),
|
||||
}
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_u64() {
|
||||
test_uint!(Testu64, u64, UInt64, DIRECTORY_NAME);
|
||||
//
|
||||
// Testu64::test_min(std::u64::MIN);
|
||||
// Testu64::test_max(std::u64::MAX);
|
||||
//
|
||||
// Testu64::test_input();
|
||||
|
||||
// Testu64::test_add();
|
||||
// Testu64::test_sub(); //Todo: Catch subtraction overflow error in gadget
|
||||
// Testu64::test_mul();
|
||||
// Testu64::test_div();
|
||||
// Testu64::test_pow(); // takes ~2mins
|
||||
|
||||
// Testu64::test_eq();
|
||||
// Testu64::test_ge();
|
||||
// Testu64::test_gt();
|
||||
// Testu64::test_le();
|
||||
// Testu64::test_gt();
|
||||
//
|
||||
// Testu64::test_assert_eq();
|
||||
// Testu64::test_ternary();
|
||||
}
|
3
compiler/tests/integer/u64/mul.leo
Normal file
3
compiler/tests/integer/u64/mul.leo
Normal file
@ -0,0 +1,3 @@
|
||||
function main(a: u64, b: u64) -> u64 {
|
||||
return a * b
|
||||
}
|
3
compiler/tests/integer/u64/one.leo
Normal file
3
compiler/tests/integer/u64/one.leo
Normal file
@ -0,0 +1,3 @@
|
||||
function main() -> u64 {
|
||||
return 1
|
||||
}
|
3
compiler/tests/integer/u64/pow.leo
Normal file
3
compiler/tests/integer/u64/pow.leo
Normal file
@ -0,0 +1,3 @@
|
||||
function main(a: u64, b: u64) -> u64 {
|
||||
return a ** b
|
||||
}
|
3
compiler/tests/integer/u64/sub.leo
Normal file
3
compiler/tests/integer/u64/sub.leo
Normal file
@ -0,0 +1,3 @@
|
||||
function main(a: u64, b: u64) -> u64 {
|
||||
return a - b
|
||||
}
|
3
compiler/tests/integer/u64/ternary.leo
Normal file
3
compiler/tests/integer/u64/ternary.leo
Normal file
@ -0,0 +1,3 @@
|
||||
function main(b: bool, x: u64, y: u64) -> u64 {
|
||||
return if b ? x : y
|
||||
}
|
3
compiler/tests/integer/u64/zero.leo
Normal file
3
compiler/tests/integer/u64/zero.leo
Normal file
@ -0,0 +1,3 @@
|
||||
function main() -> u64 {
|
||||
return 0
|
||||
}
|
3
compiler/tests/integer/u8/add.leo
Normal file
3
compiler/tests/integer/u8/add.leo
Normal file
@ -0,0 +1,3 @@
|
||||
function main(a: u8, b: u8) -> u8 {
|
||||
return a + b
|
||||
}
|
3
compiler/tests/integer/u8/assert_eq.leo
Normal file
3
compiler/tests/integer/u8/assert_eq.leo
Normal file
@ -0,0 +1,3 @@
|
||||
function main(a: u8, b: u8) {
|
||||
assert_eq!(a, b);
|
||||
}
|
3
compiler/tests/integer/u8/div.leo
Normal file
3
compiler/tests/integer/u8/div.leo
Normal file
@ -0,0 +1,3 @@
|
||||
function main(a: u8, b: u8) -> u8 {
|
||||
return a / b
|
||||
}
|
3
compiler/tests/integer/u8/eq.leo
Normal file
3
compiler/tests/integer/u8/eq.leo
Normal file
@ -0,0 +1,3 @@
|
||||
function main(a: u8, b: u8) -> bool {
|
||||
return a == b
|
||||
}
|
3
compiler/tests/integer/u8/ge.leo
Normal file
3
compiler/tests/integer/u8/ge.leo
Normal file
@ -0,0 +1,3 @@
|
||||
function main(a: u8, b: u8) -> bool {
|
||||
return a >= b
|
||||
}
|
3
compiler/tests/integer/u8/gt.leo
Normal file
3
compiler/tests/integer/u8/gt.leo
Normal file
@ -0,0 +1,3 @@
|
||||
function main(a: u8, b: u8) -> bool {
|
||||
return a > b
|
||||
}
|
3
compiler/tests/integer/u8/input.leo
Normal file
3
compiler/tests/integer/u8/input.leo
Normal file
@ -0,0 +1,3 @@
|
||||
function main(x: u8) -> u8 {
|
||||
return x
|
||||
}
|
3
compiler/tests/integer/u8/le.leo
Normal file
3
compiler/tests/integer/u8/le.leo
Normal file
@ -0,0 +1,3 @@
|
||||
function main(a: u8, b: u8) -> bool {
|
||||
return a <= b
|
||||
}
|
3
compiler/tests/integer/u8/lt.leo
Normal file
3
compiler/tests/integer/u8/lt.leo
Normal file
@ -0,0 +1,3 @@
|
||||
function main(a: u8, b: u8) -> bool {
|
||||
return a < b
|
||||
}
|
3
compiler/tests/integer/u8/max.leo
Normal file
3
compiler/tests/integer/u8/max.leo
Normal file
@ -0,0 +1,3 @@
|
||||
function main() -> u8 {
|
||||
return 255
|
||||
}
|
3
compiler/tests/integer/u8/min.leo
Normal file
3
compiler/tests/integer/u8/min.leo
Normal file
@ -0,0 +1,3 @@
|
||||
function main() -> u8 {
|
||||
return 0
|
||||
}
|
50
compiler/tests/integer/u8/mod.rs
Normal file
50
compiler/tests/integer/u8/mod.rs
Normal file
@ -0,0 +1,50 @@
|
||||
use crate::{
|
||||
boolean::{output_expected_boolean, output_false, output_true},
|
||||
compile_program, get_output,
|
||||
integer::{fail_integer, fail_synthesis, IntegerTester},
|
||||
EdwardsConstrainedValue, EdwardsTestCompiler,
|
||||
};
|
||||
use leo_compiler::{types::Integer, ConstrainedValue, InputValue};
|
||||
|
||||
use snarkos_curves::edwards_bls12::Fq;
|
||||
use snarkos_models::gadgets::r1cs::TestConstraintSystem;
|
||||
use snarkos_models::gadgets::utilities::{alloc::AllocGadget, uint::UInt8};
|
||||
|
||||
const DIRECTORY_NAME: &str = "tests/integer/u8/";
|
||||
|
||||
fn output_expected_allocated(program: EdwardsTestCompiler, expected: UInt8) {
|
||||
let output = get_output(program);
|
||||
|
||||
match output {
|
||||
EdwardsConstrainedValue::Return(vec) => match vec.as_slice() {
|
||||
[ConstrainedValue::Integer(Integer::U8(actual))] => assert_eq!(*actual, expected),
|
||||
_ => panic!("program output unknown return value"),
|
||||
},
|
||||
_ => panic!("program output unknown return value"),
|
||||
}
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_u8() {
|
||||
test_uint!(Testu8, u8, UInt8, DIRECTORY_NAME);
|
||||
|
||||
Testu8::test_min(std::u8::MIN);
|
||||
Testu8::test_max(std::u8::MAX);
|
||||
|
||||
Testu8::test_input();
|
||||
|
||||
Testu8::test_add();
|
||||
// Testu8::test_sub(); //Todo: Catch subtraction overflow error in gadget
|
||||
Testu8::test_mul();
|
||||
Testu8::test_div();
|
||||
Testu8::test_pow();
|
||||
|
||||
Testu8::test_eq();
|
||||
Testu8::test_ge();
|
||||
Testu8::test_gt();
|
||||
Testu8::test_le();
|
||||
Testu8::test_gt();
|
||||
|
||||
Testu8::test_assert_eq();
|
||||
Testu8::test_ternary();
|
||||
}
|
3
compiler/tests/integer/u8/mul.leo
Normal file
3
compiler/tests/integer/u8/mul.leo
Normal file
@ -0,0 +1,3 @@
|
||||
function main(a: u8, b: u8) -> u8 {
|
||||
return a * b
|
||||
}
|
3
compiler/tests/integer/u8/one.leo
Normal file
3
compiler/tests/integer/u8/one.leo
Normal file
@ -0,0 +1,3 @@
|
||||
function main() -> u8 {
|
||||
return 1
|
||||
}
|
3
compiler/tests/integer/u8/pow.leo
Normal file
3
compiler/tests/integer/u8/pow.leo
Normal file
@ -0,0 +1,3 @@
|
||||
function main(a: u8, b: u8) -> u8 {
|
||||
return a ** b
|
||||
}
|
3
compiler/tests/integer/u8/sub.leo
Normal file
3
compiler/tests/integer/u8/sub.leo
Normal file
@ -0,0 +1,3 @@
|
||||
function main(a: u8, b: u8) -> u8 {
|
||||
return a - b
|
||||
}
|
3
compiler/tests/integer/u8/ternary.leo
Normal file
3
compiler/tests/integer/u8/ternary.leo
Normal file
@ -0,0 +1,3 @@
|
||||
function main(b: bool, x: u8, y: u8) -> u8 {
|
||||
return if b ? x : y
|
||||
}
|
3
compiler/tests/integer/u8/zero.leo
Normal file
3
compiler/tests/integer/u8/zero.leo
Normal file
@ -0,0 +1,3 @@
|
||||
function main() -> u8 {
|
||||
return 0
|
||||
}
|
Loading…
Reference in New Issue
Block a user