// Copyright © 2024 Mikhail Hogrefe // // This file is part of Malachite. // // Malachite is free software: you can redistribute it and/or modify it under the terms of the GNU // Lesser General Public License (LGPL) as published by the Free Software Foundation; either version // 3 of the License, or (at your option) any later version. See . use malachite_base::num::basic::integers::PrimitiveInt; use malachite_base::num::basic::signeds::PrimitiveSigned; use malachite_base::num::basic::unsigneds::PrimitiveUnsigned; use malachite_base::num::conversion::string::options::FromSciStringOptions; use malachite_base::rounding_modes::RoundingMode::*; use malachite_base::test_util::generators::{ signed_gen, string_from_sci_string_options_pair_gen, string_from_sci_string_options_pair_gen_var_1, string_gen, string_gen_var_13, unsigned_gen, }; #[test] pub fn test_from_sci_string() { fn test(s: &str, out: Option) { assert_eq!(T::from_sci_string(s), out); assert_eq!( T::from_sci_string_with_options(s, FromSciStringOptions::default()), out ); } test::("0", Some(0)); test::("00", Some(0)); test::("+0", Some(0)); test::("-0", Some(0)); test::("0.00", Some(0)); test::("0e1", Some(0)); test::("0e+1", Some(0)); test::("0e-1", Some(0)); test::("+0e+1", Some(0)); test::("-0e+1", Some(0)); test::("+0.0e+1", Some(0)); test::("-0.0e+1", Some(0)); test::(".0", Some(0)); test::(".00", Some(0)); test::(".00e0", Some(0)); test::(".00e1", Some(0)); test::(".00e-1", Some(0)); test::("-.0", Some(0)); test::("-.00", Some(0)); test::("-.00e0", Some(0)); test::("-.00e1", Some(0)); test::("-.00e-1", Some(0)); test::("+.0", Some(0)); test::("+.00", Some(0)); test::("+.00e0", Some(0)); test::("+.00e1", Some(0)); test::("+.00e-1", Some(0)); test::("123", Some(123)); test::("00123", Some(123)); test::("+123", Some(123)); test::("123.00", Some(123)); test::("123e0", Some(123)); test::("12.3e1", Some(123)); test::("1.23e2", Some(123)); test::("1.23E2", Some(123)); test::("1.23e+2", Some(123)); test::("1.23E+2", Some(123)); test::(".123e3", Some(123)); test::("0.123e3", Some(123)); test::("+0.123e3", Some(123)); test::("0.0123e4", Some(123)); test::("1230e-1", Some(123)); test::("12300e-2", Some(123)); test::("12300E-2", Some(123)); test::("123.4", Some(123)); test::("123.8", Some(124)); test::("123.5", Some(124)); test::("124.5", Some(124)); test::("255.49", Some(255)); test::("255.5", None); test::("0.5", Some(0)); test::("0.51", Some(1)); test::("0.001", Some(0)); test::("1e-10", Some(0)); test::("-0.5", Some(0)); test::("-0.51", None); test::("-0.001", Some(0)); test::("-1e-10", Some(0)); test::("", None); test::("+", None); test::("-", None); test::("10e", None); test::("++1", None); test::("256", None); test::("-1", None); test::("1e10", None); test::("1.0.0", None); test::("1e++1", None); test::("1e0.1", None); test::("--.0", None); test::("++.0", None); test::("0.000a", None); test::("0.00ae-10", None); test::("0", Some(0)); test::("00", Some(0)); test::("+0", Some(0)); test::("-0", Some(0)); test::("0.00", Some(0)); test::("0e1", Some(0)); test::("0e+1", Some(0)); test::("0e-1", Some(0)); test::("+0e+1", Some(0)); test::("-0e+1", Some(0)); test::("+0.0e+1", Some(0)); test::("-0.0e+1", Some(0)); test::(".0", Some(0)); test::(".00", Some(0)); test::(".00e0", Some(0)); test::(".00e1", Some(0)); test::(".00e-1", Some(0)); test::("-.0", Some(0)); test::("-.00", Some(0)); test::("-.00e0", Some(0)); test::("-.00e1", Some(0)); test::("-.00e-1", Some(0)); test::("+.0", Some(0)); test::("+.00", Some(0)); test::("+.00e0", Some(0)); test::("+.00e1", Some(0)); test::("+.00e-1", Some(0)); test::("123", Some(123)); test::("00123", Some(123)); test::("+123", Some(123)); test::("123.00", Some(123)); test::("123e0", Some(123)); test::("12.3e1", Some(123)); test::("1.23e2", Some(123)); test::("1.23E2", Some(123)); test::("1.23e+2", Some(123)); test::("1.23E+2", Some(123)); test::(".123e3", Some(123)); test::("0.123e3", Some(123)); test::("+0.123e3", Some(123)); test::("0.0123e4", Some(123)); test::("1230e-1", Some(123)); test::("12300e-2", Some(123)); test::("12300E-2", Some(123)); test::("-123", Some(-123)); test::("-00123", Some(-123)); test::("-123.00", Some(-123)); test::("-123e0", Some(-123)); test::("-12.3e1", Some(-123)); test::("-1.23e2", Some(-123)); test::("-1.23E2", Some(-123)); test::("-1.23e+2", Some(-123)); test::("-1.23E+2", Some(-123)); test::("-.123e3", Some(-123)); test::("-0.123e3", Some(-123)); test::("-0.0123e4", Some(-123)); test::("-1230e-1", Some(-123)); test::("-12300e-2", Some(-123)); test::("-12300E-2", Some(-123)); test::("123.4", Some(123)); test::("123.8", Some(124)); test::("123.5", Some(124)); test::("124.5", Some(124)); test::("127.49", Some(127)); test::("127.5", None); test::("-123.4", Some(-123)); test::("-123.8", Some(-124)); test::("-123.5", Some(-124)); test::("-124.5", Some(-124)); test::("-127.49", Some(-127)); test::("-127.5", Some(-128)); test::("-128.51", None); test::("", None); test::("+", None); test::("-", None); test::("10e", None); test::("++1", None); test::("128", None); test::("-129", None); test::("1e10", None); test::("1.0.0", None); test::("1e++1", None); test::("1e0.1", None); test::("--.0", None); test::("++.0", None); test::(".+2", None); test::(".-2", None); test::("0.000a", None); test::("0.00ae-10", None); test::("0e10000000000000000000000000000", None); test::("0e-10000000000000000000000000000", None); } #[test] pub fn test_from_sci_string_with_options() { fn test(s: &str, options: FromSciStringOptions, out: Option) { assert_eq!(T::from_sci_string_with_options(s, options), out); } // For tests with the default options, see `test_from_sci_string` let mut options = FromSciStringOptions::default(); options.set_base(2); test::( "11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111\ 111111111111111111111111111111111111111", options, Some(u128::MAX), ); options.set_base(3); test::( "202201102121002021012000211012011021221022212021111001022110211020010021100121010", options, Some(u128::MAX), ); options.set_base(4); test::( "3333333333333333333333333333333333333333333333333333333333333333", options, Some(u128::MAX), ); options.set_base(5); test::( "11031110441201303134210404233413032443021130230130231310", options, Some(u128::MAX), ); options.set_base(8); test::( "3777777777777777777777777777777777777777777", options, Some(u128::MAX), ); options.set_base(16); test::("ffffffffffffffffffffffffffffffff", options, Some(u128::MAX)); options.set_base(32); test::("7vvvvvvvvvvvvvvvvvvvvvvvvv", options, Some(u128::MAX)); options.set_base(36); test::("f5lxx1zz5pnorynqglhzmsp33", options, Some(u128::MAX)); options.set_base(2); test::( "11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111\ 11111111111111111111111111111111111111", options, Some(i128::MAX), ); test::( "-1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\ 0000000000000000000000000000000000000000", options, Some(i128::MIN), ); options.set_base(3); test::( "101100201022001010121000102002120122110122221010202000122201220121120010200022001", options, Some(i128::MAX), ); test::( "-101100201022001010121000102002120122110122221010202000122201220121120010200022002", options, Some(i128::MIN), ); options.set_base(4); test::( "1333333333333333333333333333333333333333333333333333333333333333", options, Some(i128::MAX), ); test::( "-2000000000000000000000000000000000000000000000000000000000000000", options, Some(i128::MIN), ); options.set_base(5); test::( "3013030220323124042102424341431241221233040112312340402", options, Some(i128::MAX), ); test::( "-3013030220323124042102424341431241221233040112312340403", options, Some(i128::MIN), ); options.set_base(8); test::( "1777777777777777777777777777777777777777777", options, Some(i128::MAX), ); test::( "-2000000000000000000000000000000000000000000", options, Some(i128::MIN), ); options.set_base(16); test::("7fffffffffffffffffffffffffffffff", options, Some(i128::MAX)); test::( "-80000000000000000000000000000000", options, Some(i128::MIN), ); options.set_base(32); test::("3vvvvvvvvvvvvvvvvvvvvvvvvv", options, Some(i128::MAX)); test::("-40000000000000000000000000", options, Some(i128::MIN)); options.set_base(36); test::("7ksyyizzkutudzbv8aqztecjj", options, Some(i128::MAX)); test::("-7ksyyizzkutudzbv8aqztecjk", options, Some(i128::MIN)); options.set_base(2); test::("1e+5", options, Some(32)); test::("1e5", options, Some(32)); options.set_base(3); test::("1e+5", options, Some(243)); test::("1e5", options, Some(243)); options.set_base(4); test::("1e+5", options, Some(1024)); test::("1e5", options, Some(1024)); options.set_base(5); test::("1e+5", options, Some(3125)); test::("1e5", options, Some(3125)); options.set_base(8); test::("1e+5", options, Some(32768)); test::("1e5", options, Some(32768)); options.set_base(16); test::("1e+5", options, Some(1048576)); test::("1e5", options, Some(485)); options.set_base(32); test::("1e+5", options, Some(33554432)); test::("1e5", options, Some(1477)); options.set_base(36); test::("1e+5", options, Some(60466176)); test::("1E+5", options, Some(60466176)); test::("1e5", options, Some(1805)); options.set_base(16); test::("ff", options, Some(255)); test::("fF", options, Some(255)); test::("Ff", options, Some(255)); test::("FF", options, Some(255)); options = FromSciStringOptions::default(); options.set_rounding_mode(Down); test::("123.4", options, Some(123)); options.set_rounding_mode(Floor); test::("123.4", options, Some(123)); options.set_rounding_mode(Up); test::("123.4", options, Some(124)); options.set_rounding_mode(Ceiling); test::("123.4", options, Some(124)); options.set_rounding_mode(Nearest); test::("123.4", options, Some(123)); options.set_rounding_mode(Exact); test::("123.4", options, None); options.set_rounding_mode(Down); test::("123.5", options, Some(123)); options.set_rounding_mode(Floor); test::("123.5", options, Some(123)); options.set_rounding_mode(Up); test::("123.5", options, Some(124)); options.set_rounding_mode(Ceiling); test::("123.5", options, Some(124)); options.set_rounding_mode(Nearest); test::("123.5", options, Some(124)); options.set_rounding_mode(Exact); test::("123.5", options, None); options.set_rounding_mode(Down); test::("0.4", options, Some(0)); options.set_rounding_mode(Floor); test::("0.4", options, Some(0)); options.set_rounding_mode(Up); test::("0.4", options, Some(1)); options.set_rounding_mode(Ceiling); test::("0.4", options, Some(1)); options.set_rounding_mode(Nearest); test::("0.4", options, Some(0)); options.set_rounding_mode(Exact); test::("0.4", options, None); options.set_rounding_mode(Down); test::("0.04", options, Some(0)); options.set_rounding_mode(Floor); test::("0.04", options, Some(0)); options.set_rounding_mode(Up); test::("0.04", options, Some(1)); options.set_rounding_mode(Ceiling); test::("0.04", options, Some(1)); options.set_rounding_mode(Nearest); test::("0.04", options, Some(0)); options.set_rounding_mode(Exact); test::("0.04", options, None); options = FromSciStringOptions::default(); options.set_base(2); // 1/2 is 0.1 test::("1.01", options, Some(1)); test::("1.1", options, Some(2)); test::("1.11", options, Some(2)); test::("0.01", options, Some(0)); test::("0.1", options, Some(0)); test::("0.11", options, Some(1)); options.set_base(3); // 1/2 is 0.111... test::("1.1", options, Some(1)); test::("1.11", options, Some(1)); test::("1.111", options, Some(1)); test::("1.112", options, Some(2)); test::("0.1", options, Some(0)); test::("0.11", options, Some(0)); test::("0.111", options, Some(0)); test::("0.112", options, Some(1)); options = FromSciStringOptions::default(); options.set_base(2); test::("2", options, None); test::("102", options, None); test::("12e4", options, None); test::("12e-4", options, None); test::("1.2", options, None); test::("0.2", options, None); test::("0.002", options, None); options = FromSciStringOptions::default(); options.set_rounding_mode(Exact); test::("1.5", options, None); test::("1.9999999999999999999999999999", options, None); options.set_base(2); test::( "11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111\ 11111111111111111111111111111111111111", options, Some(i128::MAX), ); test::( "-1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\ 0000000000000000000000000000000000000000", options, Some(i128::MIN), ); options.set_base(3); test::( "101100201022001010121000102002120122110122221010202000122201220121120010200022001", options, Some(i128::MAX), ); test::( "-101100201022001010121000102002120122110122221010202000122201220121120010200022002", options, Some(i128::MIN), ); options.set_base(4); test::( "1333333333333333333333333333333333333333333333333333333333333333", options, Some(i128::MAX), ); test::( "-2000000000000000000000000000000000000000000000000000000000000000", options, Some(i128::MIN), ); options.set_base(5); test::( "3013030220323124042102424341431241221233040112312340402", options, Some(i128::MAX), ); test::( "-3013030220323124042102424341431241221233040112312340403", options, Some(i128::MIN), ); options.set_base(8); test::( "1777777777777777777777777777777777777777777", options, Some(i128::MAX), ); test::( "-2000000000000000000000000000000000000000000", options, Some(i128::MIN), ); options.set_base(16); test::("7fffffffffffffffffffffffffffffff", options, Some(i128::MAX)); test::( "-80000000000000000000000000000000", options, Some(i128::MIN), ); options.set_base(32); test::("3vvvvvvvvvvvvvvvvvvvvvvvvv", options, Some(i128::MAX)); test::("-40000000000000000000000000", options, Some(i128::MIN)); options.set_base(36); test::("7ksyyizzkutudzbv8aqztecjj", options, Some(i128::MAX)); test::("-7ksyyizzkutudzbv8aqztecjk", options, Some(i128::MIN)); options.set_base(2); test::("1e+5", options, Some(32)); test::("1e5", options, Some(32)); options.set_base(3); test::("1e+5", options, Some(243)); test::("1e5", options, Some(243)); options.set_base(4); test::("1e+5", options, Some(1024)); test::("1e5", options, Some(1024)); options.set_base(5); test::("1e+5", options, Some(3125)); test::("1e5", options, Some(3125)); options.set_base(8); test::("1e+5", options, Some(32768)); test::("1e5", options, Some(32768)); options.set_base(16); test::("1e+5", options, Some(1048576)); test::("1e5", options, Some(485)); options.set_base(32); test::("1e+5", options, Some(33554432)); test::("1e5", options, Some(1477)); options.set_base(36); test::("1e+5", options, Some(60466176)); test::("1E+5", options, Some(60466176)); test::("1e5", options, Some(1805)); options.set_base(2); test::("-1e+5", options, Some(-32)); test::("-1e5", options, Some(-32)); options.set_base(3); test::("-1e+5", options, Some(-243)); test::("-1e5", options, Some(-243)); options.set_base(4); test::("-1e+5", options, Some(-1024)); test::("-1e5", options, Some(-1024)); options.set_base(5); test::("-1e+5", options, Some(-3125)); test::("-1e5", options, Some(-3125)); options.set_base(8); test::("-1e+5", options, Some(-32768)); test::("-1e5", options, Some(-32768)); options.set_base(16); test::("-1e+5", options, Some(-1048576)); test::("-1e5", options, Some(-485)); options.set_base(32); test::("-1e+5", options, Some(-33554432)); test::("-1e5", options, Some(-1477)); options.set_base(36); test::("-1e+5", options, Some(-60466176)); test::("-1E+5", options, Some(-60466176)); test::("-1e5", options, Some(-1805)); options.set_base(16); test::("ff", options, Some(255)); test::("fF", options, Some(255)); test::("Ff", options, Some(255)); test::("FF", options, Some(255)); test::("-ff", options, Some(-255)); test::("-fF", options, Some(-255)); test::("-Ff", options, Some(-255)); test::("-FF", options, Some(-255)); options = FromSciStringOptions::default(); options.set_rounding_mode(Down); test::("123.4", options, Some(123)); options.set_rounding_mode(Floor); test::("123.4", options, Some(123)); options.set_rounding_mode(Up); test::("123.4", options, Some(124)); options.set_rounding_mode(Ceiling); test::("123.4", options, Some(124)); options.set_rounding_mode(Nearest); test::("123.4", options, Some(123)); options.set_rounding_mode(Exact); test::("123.4", options, None); options.set_rounding_mode(Down); test::("-123.4", options, Some(-123)); options.set_rounding_mode(Floor); test::("-123.4", options, Some(-124)); options.set_rounding_mode(Up); test::("-123.4", options, Some(-124)); options.set_rounding_mode(Ceiling); test::("-123.4", options, Some(-123)); options.set_rounding_mode(Nearest); test::("-123.4", options, Some(-123)); options.set_rounding_mode(Exact); test::("-123.4", options, None); options.set_rounding_mode(Down); test::("123.5", options, Some(123)); options.set_rounding_mode(Floor); test::("123.5", options, Some(123)); options.set_rounding_mode(Up); test::("123.5", options, Some(124)); options.set_rounding_mode(Ceiling); test::("123.5", options, Some(124)); options.set_rounding_mode(Nearest); test::("123.5", options, Some(124)); options.set_rounding_mode(Exact); test::("123.5", options, None); options.set_rounding_mode(Down); test::("-123.5", options, Some(-123)); options.set_rounding_mode(Floor); test::("-123.5", options, Some(-124)); options.set_rounding_mode(Up); test::("-123.5", options, Some(-124)); options.set_rounding_mode(Ceiling); test::("-123.5", options, Some(-123)); options.set_rounding_mode(Nearest); test::("-123.5", options, Some(-124)); options.set_rounding_mode(Exact); test::("-123.5", options, None); options.set_rounding_mode(Down); test::("0.4", options, Some(0)); options.set_rounding_mode(Floor); test::("0.4", options, Some(0)); options.set_rounding_mode(Up); test::("0.4", options, Some(1)); options.set_rounding_mode(Ceiling); test::("0.4", options, Some(1)); options.set_rounding_mode(Nearest); test::("0.4", options, Some(0)); options.set_rounding_mode(Exact); test::("0.4", options, None); options.set_rounding_mode(Down); test::("-0.4", options, Some(0)); options.set_rounding_mode(Floor); test::("-0.4", options, Some(-1)); options.set_rounding_mode(Up); test::("-0.4", options, Some(-1)); options.set_rounding_mode(Ceiling); test::("-0.4", options, Some(0)); options.set_rounding_mode(Nearest); test::("-0.4", options, Some(0)); options.set_rounding_mode(Exact); test::("-0.4", options, None); options.set_rounding_mode(Down); test::("0.04", options, Some(0)); options.set_rounding_mode(Floor); test::("0.04", options, Some(0)); options.set_rounding_mode(Up); test::("0.04", options, Some(1)); options.set_rounding_mode(Ceiling); test::("0.04", options, Some(1)); options.set_rounding_mode(Nearest); test::("0.04", options, Some(0)); options.set_rounding_mode(Exact); test::("0.04", options, None); options.set_rounding_mode(Down); test::("-0.04", options, Some(0)); options.set_rounding_mode(Floor); test::("-0.04", options, Some(-1)); options.set_rounding_mode(Up); test::("-0.04", options, Some(-1)); options.set_rounding_mode(Ceiling); test::("-0.04", options, Some(0)); options.set_rounding_mode(Nearest); test::("-0.04", options, Some(0)); options.set_rounding_mode(Exact); test::("-0.04", options, None); options = FromSciStringOptions::default(); options.set_base(2); // 1/2 is 0.1 test::("1.01", options, Some(1)); test::("1.1", options, Some(2)); test::("1.11", options, Some(2)); test::("0.01", options, Some(0)); test::("0.1", options, Some(0)); test::("0.11", options, Some(1)); test::("-1.01", options, Some(-1)); test::("-1.1", options, Some(-2)); test::("-1.11", options, Some(-2)); test::("-0.01", options, Some(0)); test::("-0.1", options, Some(0)); test::("-0.11", options, Some(-1)); options.set_base(3); // 1/2 is 0.111... test::("1.1", options, Some(1)); test::("1.11", options, Some(1)); test::("1.111", options, Some(1)); test::("1.112", options, Some(2)); test::("0.1", options, Some(0)); test::("0.11", options, Some(0)); test::("0.111", options, Some(0)); test::("0.112", options, Some(1)); test::("-1.1", options, Some(-1)); test::("-1.11", options, Some(-1)); test::("-1.111", options, Some(-1)); test::("-1.112", options, Some(-2)); test::("-0.1", options, Some(0)); test::("-0.11", options, Some(0)); test::("-0.111", options, Some(0)); test::("-0.112", options, Some(-1)); options = FromSciStringOptions::default(); options.set_base(2); test::("2", options, None); test::("102", options, None); test::("12e4", options, None); test::("12e-4", options, None); test::("1.2", options, None); test::("0.2", options, None); test::("0.002", options, None); test::("-2", options, None); test::("-102", options, None); test::("-12e4", options, None); test::("-12e-4", options, None); test::("-1.2", options, None); test::("-0.2", options, None); test::("-0.002", options, None); options.set_base(25); options.set_rounding_mode(Ceiling); test::(".be.2", options, None); options = FromSciStringOptions::default(); options.set_rounding_mode(Exact); test::("1.5", options, None); test::("1.9999999999999999999999999999", options, None); test::("-1.5", options, None); test::("-1.9999999999999999999999999999", options, None); } fn from_sci_string_helper_helper(s: &str) { if let Some(x) = T::from_sci_string(s) { assert!(!s.ends_with('+')); assert!(!s.ends_with('-')); assert!(!s.contains("++")); assert!(!s.contains("+-")); assert!(!s.contains("-+")); assert!(!s.contains("--")); assert!(!s.contains("-+")); assert!(s.chars().filter(|&c| c == '.').count() <= 1); assert!(s.chars().filter(|&c| c == '-').count() <= 2); assert!(s.chars().filter(|&c| c == '+').count() <= 2); for c in ['.', 'e', 'E', '+'] { if s.contains(c) { return; } } if s.starts_with('0') || s.starts_with("-0") { return; } assert_eq!(x.to_string(), s); } } fn from_sci_string_helper() { string_gen().test_properties(|s| { from_sci_string_helper_helper::(&s); }); string_gen_var_13().test_properties(|s| { from_sci_string_helper_helper::(&s); }); } fn from_sci_string_helper_unsigned() { unsigned_gen::().test_properties(|x| { assert_eq!(T::from_sci_string(&x.to_string()).unwrap(), x); }); } fn from_sci_string_helper_signed() { signed_gen::().test_properties(|x| { assert_eq!(T::from_sci_string(&x.to_string()).unwrap(), x); }); } #[test] fn from_sci_string_properties() { apply_fn_to_primitive_ints!(from_sci_string_helper); apply_fn_to_unsigneds!(from_sci_string_helper_unsigned); apply_fn_to_signeds!(from_sci_string_helper_signed); } fn from_sci_string_with_options_helper_helper( s: &str, options: FromSciStringOptions, ) { if let Some(x) = T::from_sci_string_with_options(s, options) { assert!(!s.ends_with('+')); assert!(!s.ends_with('-')); assert!(!s.contains("++")); assert!(!s.contains("+-")); assert!(!s.contains("-+")); assert!(!s.contains("--")); assert!(!s.contains("-+")); assert!(s.chars().filter(|&c| c == '.').count() <= 1); assert!(s.chars().filter(|&c| c == '-').count() <= 2); assert!(s.chars().filter(|&c| c == '+').count() <= 2); for c in ['.', 'e', 'E', '+'] { if s.contains(c) { return; } } if s.starts_with('0') || s.starts_with("-0") { return; } assert_eq!(x.to_string_base(options.get_base()), s.to_lowercase()); } } fn from_sci_string_with_options_helper() { string_from_sci_string_options_pair_gen().test_properties(|(s, options)| { from_sci_string_with_options_helper_helper::(&s, options); }); string_from_sci_string_options_pair_gen_var_1().test_properties(|(s, options)| { from_sci_string_with_options_helper_helper::(&s, options); }); } #[test] fn from_sci_string_with_options_properties() { apply_fn_to_primitive_ints!(from_sci_string_with_options_helper); }