Commit graph

27 commits

Author SHA1 Message Date
Sei Lisa
23e71354c5 llModPow precision has been fixed and the delay removed 2025-02-01 12:00:18 +01:00
Sei Lisa
1d6bb809bf Fix bug in llListSortStrided producing incorrect results sometimes
It used `a = lst[i]` instead of taking the stride index into account (that is, it should have been `a = lst[i+idx]`). Anyway, the exact same value is in b, so use that instead.

Test case by Tapple Gao.
2024-10-09 01:40:19 +02:00
Sei Lisa
bf505220ac Calculate llFrand's min and max when possible 2024-05-07 00:07:17 +02:00
Sei Lisa
65326115d8 Fix/extend the < operator; promote min/max from symbol to node
- Fix case where CONST < FNCALL or FNCALL < CONST, when the function was marked as SEF but the args were not SEF, could result in the FNCALL being optimized out, thus failing to apply the side effects of the arguments.
- Copy the function's `min` and `max` present in the symbol table, to the node; use the node's `min` and `max` properties in the `<` operator instead of looking up the symbol and using that.
- Extend it to cover all cases where CONST < SEFexpr and SEFexpr < CONST where SEFexpr.min and SEFexpr.max are defined.
2024-05-06 23:55:55 +02:00
Sei Lisa
ff85a1e837 Implement llListSortStrided
The only difference between this function and llListSort is the index, so llListSort is adapted to accept it.
2024-04-19 15:22:35 +02:00
Sei Lisa
5ee290deff Implement llListFindListNext and llListFindStrided 2024-04-19 13:47:26 +02:00
Sei Lisa
002ef96a9d Implement llList2ListSlice 2024-04-18 18:08:57 +02:00
Sei Lisa
b7f16900ed Update to kwdb 0.0.20240415000
Quite some new functions and constants.
2024-04-15 16:15:56 +02:00
Sei Lisa
4a5c9089a0 Add another test case for llReplaceSubString 2023-04-09 12:38:05 +02:00
Sei Lisa
5f1062d378 Add llReplaceSubString calculation + tests 2023-04-09 12:28:59 +02:00
Sei Lisa
e4c9627772 llHMAC: Make more elaborate tests and allow running them 2023-04-09 11:08:20 +02:00
Sei Lisa
500a8bb751 llHMAC implementation (without importing hmac) 2023-04-09 11:08:20 +02:00
Sei Lisa
75b29c92ed Fix warning about possible future breakage
Incoming Unicode regular expressions allow brackets inside brackets, therefore POSIX semantics no longer apply. Python warns about possible future breakage, so add backslash escape to square bracket opening inside the character class.
2022-12-12 16:32:14 +01:00
Sei Lisa
0b7d04e5ff Deal with changes in llChar, strengthen some tests
Previously, llChar formed an UTF-8-1993 string with the given code and converted that, resulting in multiple question marks when the conversion to Unicode forced by Mono caused errors in multiple characters. They have changed the implementation and now it also considers U+FFFF invalid, and only returns one U+FFFD character if the input is invalid, and LSO behaves the same as Mono (no UTF-8-1993 anymore).

We've also detected problems with Windows (who else would it be) for the Unicode "astral" planes (planes beyond the Basic Multilingual Plane), so now there are new tests that include characters > U+FFFF. And since some builds of Python 2 use UTF-16 internally, we also check llSubString and friends with positions after an astral plane character. This is currently failing under Windows, as there are numerous encoding and line ending problems happening on that OS, especially with Python 3.
2022-12-08 13:22:54 +01:00
Sei Lisa
9c281dec64 New function, llSHA256String
Implement it in lslbasefuncs.py, and add tests. Also add more test vectors for llMD5String and llSHA1String.
2022-10-14 18:39:04 +02:00
Sei Lisa
d2e64e25a6 Rewrite Mono float to string conversion; fix llDumpList2String
llDumpList2String has changed its behaviour with respect to minus zero. Now it converts -0.0 to a string without the minus sign.

While testing this, we noticed several mismatches in the float to string conversions; the existing routine did not properly convert some values because as we discovered later, it is subject to double rounding; one of them is the built-in round-to-nearest-or-even while getting the first 7 significant digits, and the other is just an increment when the digit is a 5 or more, so round to nearest, ties away from zero, and is performed on the digit past the five or six visible digits that LSL shows.

The new code is a tad easier to understand and more robust.

A first variant of the new code is left commented out for history's sake, and will be removed in the next commit.
2022-05-17 22:28:49 +02:00
Sei Lisa
281ff4d96a Strings representing denormals no longer give 0 when cast to float
This annoyance and discrepancy with LSO was finally fixed by Linden Lab. The change has prompted some modifications to the test suite to accommodate for the new results. A further improvement has been to make these tests more friendly to be run in SL, making it easier to verify the results.

Fixes #17.

Reported by SaladDais@users.noreply.github.com - thanks!
2022-05-17 13:48:05 +02:00
Sei Lisa
c4f210138f Add newly introduced functions llOrd, llChar, llHash 2021-05-08 22:43:31 +02:00
Sei Lisa
0b266db758 Fix InternalUTF8ToString to consider U+FFFE as invalid
This commit also adds the foldtabs option as default for the eval test suite, and substantially improves the Unicode valid/invalid character test.
2020-11-19 22:26:42 +01:00
Pedro Gimeno
4c49e87f4c Add -y to test entries without an .err file; improve consistency 2020-11-08 19:07:07 +01:00
Sei Lisa
9e5f6e928d Improve compatibility of llToLower/llToUpper
Based on sim experiments.
2020-09-23 01:11:21 +02:00
Sei Lisa
c8a0a21823 Add llLinear2sRGB / llsRGB2Linear implementations 2020-04-23 01:10:37 +02:00
Sei Lisa
1bdaff32ab When optimizing nonconst * const, cast the result to the type of the operator.
Per bug report by @Welcius.

Fixes #8.
2019-07-02 15:40:20 +02:00
Sei Lisa
00b103c8aa Simplify v*q, make q*q more accurate, add q*q and q/q unit tests
vector * quaternion: Simplified by precalculating the repeated products and removing math.fsum.

quaternion * quaternion: Add more F32's to get a result closer to SL's (still not there, but we're definitively closer now).

We left out quaternion/quaternion in the tests, and the q*q test was not general enough (had many zeros). Remedied that.
2019-05-23 01:57:27 +02:00
Sei Lisa
ec509b3840 Fix parenthesization of unary minus
The algorithm for adding parentheses around unary operators was not working properly. It converted a * (-b) * c into a * -b * c, which LSL handles as a * -(b * c).

Fix and add test cases for that. One of the test cases shows an example where the difference matters: 0 * (-1e20) * 1e20 should result in 0.0, but if wrongly parenthesized, it gives NaN, because 1e20*1e20 gives infinity due to float overflow, and minus infinity times 0 is indeterminate.

The addition of parentheses has been improved, but it still does not eliminate every redundant parenthesis.

Also fix the horrendous typo of using "operands" where it should be "operators".
2019-05-04 23:20:20 +02:00
Sei Lisa
d394adf45a Add a test case to the infinity vector conversion 2019-01-15 23:18:10 +01:00
Sei Lisa
1867dc78e7 Add the new test suite.
This test suite has been in use for a long time now, in place of the obsolete and unmanageable testparser.py and testfuncs.py. It verifies the complete optimizer output to stdout and stderr, to ensure that the output matches the expectations.

See unit_tests/README.txt for more info.
2019-01-04 20:27:36 +01:00