Commit graph

141 commits

Author SHA1 Message Date
Sei Lisa
914b57f603 Fix llComputeHash on Python 3 2024-04-18 19:36:53 +02:00
Sei Lisa
14a97090bf LSO no longer returns -1 for llListFindList([], []) 2024-04-18 19:24:32 +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
f854e94349 New copyright year 2024-04-14 11:40:21 +02:00
Sei Lisa
b8f9d8b632 Fix typo in llListFindStrided; downgrade llListSortStrided to TODO 2024-04-14 11:38:43 +02:00
Sei Lisa
28b42e7c6b LL fixed the overflow in llAbs() in Mono 2023-11-18 13:08:50 +01:00
Sei Lisa
152ede8cd0 Add new functions (no implementation yet) and constants 2023-07-15 11:05:53 +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
231c16b90e New copyright year 2023-02-03 13:06:18 +01:00
Sei Lisa
91b3186245 Microoptimizations; minor fix
The microoptimizations do nothing at all, but it was poor style before them.

The fix is a missing u for a Unicode string.
2023-01-31 20:41:37 +01:00
Sei Lisa
dc655e3501 Monkey-patch some string functions in narrow string builds
The official distribution of Python 2.7 on Windows is built with "narrow strings" (UTF-16 strings with no proper indexing or length). This makes some tests fail. "Fix" this by monkey-patching a few functions and using a wrapping unicode class, as we can't monkey-patch the actual unicode type.

This is very fragile code, but it's the best we could do given the limitations.
2022-12-11 23:22:42 +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
8d413f910e Forgot to update copyright year 2022-06-07 19:46:31 +02:00
Sei Lisa
fb61e00780 Minor cleanup 2022-06-07 19:39:26 +02:00
Sei Lisa
9dedabfa71 Don't rely on Python generating Indet on (float)"-nan"
We did the same for vectors. We don't have enough guarantee that Python will return Indet when evaluating float(u"-nan").
2022-05-19 14:42:01 +02:00
Sei Lisa
07cf4fe30f LSO does not force positive zero in llDumpList2String
And minor aesthetic change.
2022-05-19 14:29:14 +02:00
Sei Lisa
828b020b8c Remove disabled code 2022-05-17 22:30:07 +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
7c630f4ce4 Fix crash in conversion to string for floats < 1e-13
Fixes part of #17.

Reported by SaladDais@users.noreply.github.com, thanks!
2022-05-17 13:37:39 +02:00
Sei Lisa
be479771aa Implement llListRandomize for the calculator 2022-03-29 23:29:09 +02:00
Sei Lisa
03c33d1471 Simplify comparisons for most cases in llChar 2021-05-19 22:49:14 +02:00
Sei Lisa
c4f210138f Add newly introduced functions llOrd, llChar, llHash 2021-05-08 22:43:31 +02:00
Sei Lisa
53e8bd659a The Base64 functions that used to produce garbage no longer do 2021-03-21 19:05:37 +01:00
Sei Lisa
81906475ff Update copyright year 2021-01-05 23:27:21 +01: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
Sei Lisa
4771c76d85 Greatly simplify InternalUTF8ToString using a regular expression 2020-11-19 20:23:44 +01:00
Sei Lisa
c77607d318 Document the behaviour of InternalUTF8ToString 2020-11-19 20:22:11 +01:00
Sei Lisa
16d8c4c9d1 More progress in migration to dual Python 2&3. Just 2 tests left. 2020-11-10 00:15:48 +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
234b9b23a3 Bump copyright year 2020-04-23 00:38: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
f0068dd3bc Style fixes
Calm pyflakes by using identifiers, and change hexversion to version.major.
2019-02-04 00:07:12 +01:00
Sei Lisa
fe2dd9a721 First baby steps towards dual Python2+3 compatibility 2019-01-16 00:15:06 +01:00
Sei Lisa
f243f3a3c1 New copyright year 2019-01-01 22:54:34 +01:00
Sei Lisa
c62773ad3f Refine the denormal check for Mono
The threshold for returning 0 for denormals is slightly different.
2018-05-09 19:04:09 +02:00
Sei Lisa
091f06cccc Fix threshold value for denormal to be taken as 0
(float)"1.1754944e-38" is != 0
(float)"1.1754943e-38" is == 0

Yet, 1.1754944e-38 == 1.1754943e-38.

The fix is to perform the operations as doubles, and convert to F32 *after* comparing the denormal range.
2018-04-27 23:44:27 +02:00
Sei Lisa
d0d6d6744b Bump copyright year
The help text in main.py was still at 2015. Oops.
2018-03-23 16:36:45 +01:00
Sei Lisa
fd815f0bdb Fix compare and llListSort for LSO.
In LSO, they compare UTF-8 bytes, not Unicode codepoints.
2017-10-21 12:32:41 +02:00
Sei Lisa
028b244a9e lslbasefuncs: Rewrite some things in a different way.
Also some formatting changes. No functionality changes.
2017-10-18 15:20:19 +02:00
Sei Lisa
e051d49338 llAsin and llAcos return indet for indet input. 2017-10-18 02:42:58 +02:00
Sei Lisa
f77590df67 Fix sign of NaN*Indet and NaN/Indet.
In Python, NaN*Indet in any order returns the second operand, and NaN/Indet in any order returns the first operand. LSL consistently returns NaN in all cases.
2017-10-14 15:16:18 +02:00
Sei Lisa
0dc8629007 Raise ELSLInvalidType on invalid type passed to cond(). 2017-10-14 14:17:42 +02:00
Sei Lisa
6faa7816e6 Change ELSLInvalidType to ELSLTypeMismatch where appropriate.
The force type functions ff(), fi(), fs()... should normally trigger ELSLTypeMismatch when the input is not in the expected range of types, rather than ELSLInvalidType, which is reserved for the case where the type is not a valid LSL type.
2017-10-14 11:33:18 +02:00
Sei Lisa
9e7a5d1cdf Change strategy for the checking of function input types.
Rather than assert that the types are correct, use the force type functions on the parameters:
ff, fk, fs, q2f, v2f, and the new fi, fl.

These functions have also been modified to ensure that the input type supports an implicit typecast to the target type and perform it, or emit ELSLInvalidType otherwise, rather than an assertion failure. fl in particular returns the original list if it isn't changed, or a copy if it is.

A couple bugs were found in testfuncs.py as a result, which have been fixed as well. A test has been added to ensure that the exception that caught these bugs remains in place.

The isxxxx functions are no longer necessary, so they are removed. Same goes for the painful cast handling process in foldconst, which was basically performing this task, and not necessarily well.

This approach is much more robust and should have been used since the beginning, but I didn't figure it out then.
2017-10-12 17:16:16 +02:00