git.delta.rocks / jrsonnet / refs/commits / 5f9657289c33

difftreelog

test pass full go-jsonnet test suite

pwtnqznvYaroslav Bolyukin2026-02-08parent: #eea91c3.patch.diff
in: master

54 files changed

modifiedcrates/jrsonnet-evaluator/src/evaluate/mod.rsdiffbeforeafterboth
532 )),532 )),
533533
534 (Val::Str(s), Val::Num(n)) => Val::Str({534 (Val::Str(s), Val::Num(n)) => Val::Str({
535 let n = n.get();
536 if n.fract() > f64::EPSILON {
537 bail!(FractionalIndex)
538 }
539 if n < 0.0 {
540 bail!(ArrayBoundsError(n as isize, s.into_flat().chars().count()));
541 }
535 let v: IStr = s542 let v: IStr = s
536 .clone()543 .clone()
537 .into_flat()544 .into_flat()
538 .chars()545 .chars()
539 .skip(n.get() as usize)546 .skip(n as usize)
540 .take(1)547 .take(1)
541 .collect::<String>()548 .collect::<String>()
542 .into();549 .into();
543 if v.is_empty() {550 if v.is_empty() {
544 let size = s.into_flat().chars().count();551 bail!(StringBoundsError(n as usize, s.into_flat().chars().count()))
545 bail!(StringBoundsError(n.get() as usize, size))
546 }552 }
547 StrValue::Flat(v)553 StrValue::Flat(v)
548 }),554 }),
modifiedcrates/jrsonnet-stdlib/src/math.rsdiffbeforeafterboth
168168
169#[builtin]169#[builtin]
170pub fn builtin_deg2rad(x: f64) -> f64 {170pub fn builtin_deg2rad(x: f64) -> f64 {
171 x * f64::consts::PI / 180.0171 x.to_radians()
172}172}
173173
174#[builtin]174#[builtin]
175pub fn builtin_rad2deg(x: f64) -> f64 {175pub fn builtin_rad2deg(x: f64) -> f64 {
176 x * 180.0 / f64::consts::PI176 x.to_degrees()
177}177}
178178
179#[builtin]179#[builtin]
modifiedcrates/jrsonnet-stdlib/src/sort.rsdiffbeforeafterboth
17enum SortKeyType {17enum SortKeyType {
18 Number,18 Number,
19 String,19 String,
20 Unspecialized,
20 Unknown,21 Unknown,
21}22}
2223
31 (Val::Str(_) | Val::Num(_), _) => {32 (Val::Str(_) | Val::Num(_), _) => {
32 bail!("sort elements should have the same types")33 bail!("sort elements should have the same types")
33 }34 }
34 _ => {}35 (_, _) => return Ok(SortKeyType::Unspecialized),
35 }36 }
36 }37 }
37 Ok(sort_type)38 Ok(sort_type)
49 Val::Str(s) => s.clone(),50 Val::Str(s) => s.clone(),
50 _ => unreachable!(),51 _ => unreachable!(),
51 }),52 }),
52 SortKeyType::Unknown => {53 SortKeyType::Unknown | SortKeyType::Unspecialized => {
53 let mut err = None;54 let mut err = None;
54 // evaluate_compare_op will never return equal on types, which are different from55 // evaluate_compare_op will never return equal on types, which are different from
55 // jsonnet perspective56 // jsonnet perspective
88 Val::Str(s) => s.clone(),89 Val::Str(s) => s.clone(),
89 _ => unreachable!(),90 _ => unreachable!(),
90 }),91 }),
91 SortKeyType::Unknown => {92 SortKeyType::Unknown | SortKeyType::Unspecialized => {
92 let mut err = None;93 let mut err = None;
93 // evaluate_compare_op will never return equal on types, which are different from94 // evaluate_compare_op will never return equal on types, which are different from
94 // jsonnet perspective95 // jsonnet perspective
modifiedcrates/jrsonnet-stdlib/src/strings.rsdiffbeforeafterboth
25}25}
2626
27#[builtin]27#[builtin]
28pub fn builtin_str_replace(str: String, from: IStr, to: IStr) -> String {28pub fn builtin_str_replace(str: String, from: IStr, to: IStr) -> Result<String> {
29 if from.is_empty() {
30 bail!("'from' string must not be zero length");
31 }
29 str.replace(&from as &str, &to as &str)32 Ok(str.replace(&from as &str, &to as &str))
30}33}
3134
32#[builtin]35#[builtin]
addedtests/go_testdata_golden_override/builtinObjectRemoveKey_super_assert.jsonnet.goldendiffbeforeafterboth

no changes

addedtests/go_testdata_golden_override/std.filter8.jsonnet.goldendiffbeforeafterboth

no changes

addedtests/go_testdata_golden_override/std.filter_swapped_args.jsonnet.goldendiffbeforeafterboth

no changes

addedtests/go_testdata_golden_override/std.flatmap5.jsonnet.goldendiffbeforeafterboth

no changes

addedtests/go_testdata_golden_override/std.join7.jsonnet.goldendiffbeforeafterboth

no changes

addedtests/go_testdata_golden_override/std.join8.jsonnet.goldendiffbeforeafterboth

no changes

addedtests/go_testdata_golden_override/std.makeArrayNamed3.jsonnet.goldendiffbeforeafterboth

no changes

addedtests/go_testdata_golden_override/std.makeArray_bad.jsonnet.goldendiffbeforeafterboth

no changes

addedtests/go_testdata_golden_override/std.makeArray_bad2.jsonnet.goldendiffbeforeafterboth

no changes

addedtests/go_testdata_golden_override/std.makeArray_noninteger.jsonnet.goldendiffbeforeafterboth

no changes

addedtests/go_testdata_golden_override/std.makeArray_noninteger_big.jsonnet.goldendiffbeforeafterboth

no changes

addedtests/go_testdata_golden_override/std.manifestYamlDoc_error.jsonnet.goldendiffbeforeafterboth

no changes

addedtests/go_testdata_golden_override/std.mantissa2.jsonnet.goldendiffbeforeafterboth

no changes

addedtests/go_testdata_golden_override/std.mantissa3.jsonnet.goldendiffbeforeafterboth

no changes

addedtests/go_testdata_golden_override/std.mantissa4.jsonnet.goldendiffbeforeafterboth

no changes

addedtests/go_testdata_golden_override/std.mantissa5.jsonnet.goldendiffbeforeafterboth

no changes

addedtests/go_testdata_golden_override/std.mantissa6.jsonnet.goldendiffbeforeafterboth

no changes

addedtests/go_testdata_golden_override/std.mantissa7.jsonnet.goldendiffbeforeafterboth

no changes

addedtests/go_testdata_golden_override/std.maxArrayOnEmpty.jsonnet.goldendiffbeforeafterboth

no changes

addedtests/go_testdata_golden_override/std.md5_6.jsonnet.goldendiffbeforeafterboth

no changes

addedtests/go_testdata_golden_override/std.minArrayOnEmpty.jsonnet.goldendiffbeforeafterboth

no changes

addedtests/go_testdata_golden_override/std.modulo2.jsonnet.goldendiffbeforeafterboth

no changes

addedtests/go_testdata_golden_override/std.modulo3.jsonnet.goldendiffbeforeafterboth

no changes

addedtests/go_testdata_golden_override/std.primitiveEquals10.jsonnet.goldendiffbeforeafterboth

no changes

addedtests/go_testdata_golden_override/std.primitiveEquals13.jsonnet.goldendiffbeforeafterboth

no changes

addedtests/go_testdata_golden_override/std.primitiveEquals6.jsonnet.goldendiffbeforeafterboth

no changes

addedtests/go_testdata_golden_override/std.primitiveEquals7.jsonnet.goldendiffbeforeafterboth

no changes

addedtests/go_testdata_golden_override/std.primitiveEquals9.jsonnet.goldendiffbeforeafterboth

no changes

addedtests/go_testdata_golden_override/std.sort3.jsonnet.goldendiffbeforeafterboth

no changes

addedtests/go_testdata_golden_override/std.sort4.jsonnet.goldendiffbeforeafterboth

no changes

addedtests/go_testdata_golden_override/std.thisFile.jsonnet.goldendiffbeforeafterboth

no changes

addedtests/go_testdata_golden_override/std.thisFile2.jsonnet.goldendiffbeforeafterboth

no changes

addedtests/go_testdata_golden_override/std.toString5.jsonnet.goldendiffbeforeafterboth

no changes

addedtests/go_testdata_golden_override/stdlib_smoke_test.jsonnet.goldendiffbeforeafterboth

no changes

addedtests/go_testdata_golden_override/strReplace3.jsonnet.goldendiffbeforeafterboth

no changes

addedtests/go_testdata_golden_override/string_divided_by_number.jsonnet.goldendiffbeforeafterboth

no changes

addedtests/go_testdata_golden_override/string_index_negative.jsonnet.goldendiffbeforeafterboth

no changes

addedtests/go_testdata_golden_override/string_index_out_of_bounds.jsonnet.goldendiffbeforeafterboth

no changes

addedtests/go_testdata_golden_override/string_minus_number.jsonnet.goldendiffbeforeafterboth

no changes

addedtests/go_testdata_golden_override/string_plus_function.jsonnet.goldendiffbeforeafterboth

no changes

addedtests/go_testdata_golden_override/supersugar8.jsonnet.goldendiffbeforeafterboth

no changes

addedtests/go_testdata_golden_override/syntax_error.jsonnet.goldendiffbeforeafterboth

no changes

addedtests/go_testdata_golden_override/tailstrict2.jsonnet.goldendiffbeforeafterboth

no changes

addedtests/go_testdata_golden_override/too_many_arguments.jsonnet.goldendiffbeforeafterboth

no changes

addedtests/go_testdata_golden_override/type_error.jsonnet.goldendiffbeforeafterboth

no changes

addedtests/go_testdata_golden_override/unary_minus4.jsonnet.goldendiffbeforeafterboth

no changes

addedtests/go_testdata_golden_override/unary_object.jsonnet.goldendiffbeforeafterboth

no changes

addedtests/go_testdata_golden_override/unfinished_args.jsonnet.goldendiffbeforeafterboth

no changes

addedtests/go_testdata_golden_override/variable_not_visible.jsonnet.goldendiffbeforeafterboth

no changes

modifiedtests/tests/cpp_test_suite.rsdiffbeforeafterboth
183 "number_leading_zero.jsonnet",183 "number_leading_zero.jsonnet",
184 // Jrsonnet has this overload184 // Jrsonnet has this overload
185 "number_times_string.jsonnet",185 "number_times_string.jsonnet",
186 // Jrsonnet has stricter implementations, this is a dumb thing that the filter value might not be
187 // evaluated anyway...
188 "std.filter7.jsonnet",
189 // Golang fails with max stack frames exceeded error
190 "std.makeArray_recursive_evalutation_order_matters.jsonnet",
191 // Jrsonnet has this overload
192 "string_times_number.jsonnet",
193 // Tailstrict semantics is partially unspecified
194 "tailstrict3.jsonnet",
186];195];
187196
188#[test]197#[test]
244 "expected error for golden {}:\n<got>\n{result}\n</got>\n<golden>\n{golden}\n</golden>",253 "expected error for golden {}:\n<got>\n{result}\n</got>\n<golden>\n{golden}\n</golden>",
245 entry.path().display()254 entry.path().display()
246 ),255 ),
247 (Ok(result), Ok(golden)) => {256 (Ok(result_v), Ok(golden)) => {
248 // Show diff relative to golden`.257 // Show diff relative to golden`.
249 let diff = JsonDiff::diff_string(&golden, &result, false);258 let diff = JsonDiff::diff_string(&golden, &result_v, false);
250 if let Some(diff) = diff {259 if let Some(diff) = diff {
260 if env::var_os("UPDATE_GOLDEN").is_some() {
261 fs::write(golden_override, result)?;
262 } else {
251 panic!(263 panic!(
252 "Result \n{result:#}\n\264 "Result \n{result_v:#}\n\
253 and golden \n{golden:#}\n\265 and golden \n{golden:#}\n\
254 did not match structurally:\n{diff:#}\n\266 did not match structurally:\n{diff:#}\n\
255 for golden {}",267 for golden {}",
256 entry.path().display()268 entry.path().display()
257 );269 );
270 }
258 }271 }
259 }272 }
260 (Err(_), Err(_)) => {273 (Err(_), Err(_)) => {