Skip to content

Commit 4455976

Browse files
Fix numeric types with less than 32 bits are wrong
This adds additional unit tests for numeric types when using the Generic Object Serializer. Numeric types with less than 32 bits currently fail. This includes: - Enum U8 - Enum U16 - U8 - U16 - I8 - I16 These tests fail because the serializer assumes that type information is maintained by JSONtext when parsing from JSON. This, however, is not the case with certain numeric types, for which the parser always returns 32-bit values, no matter which input type is specified. When the 32-bit value is later combined with the type information of a type with less bits, the lower bits are truncated, which results in incorrect values. Note that 64-bit values are not affected because they are handled in native bitness by JSONtext. Fixed by changing the minimum required version for JSONtext to 1.6.7, which returns the correct bitness for all numeric types. References #22
1 parent 4980f86 commit 4455976

37 files changed

Lines changed: 297 additions & 8 deletions

.vipb

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
1-
<VI_Package_Builder_Settings Version="2018" Created_Date="2021-03-19 22:45:16" Modified_Date="2022-04-23 17:44:10" Creator="Pascal Neuperger" Comments="" ID="5a43a13c055b83d65b60f5a05381030b">
1+
<VI_Package_Builder_Settings Version="2018" Created_Date="2021-03-19 22:45:16" Modified_Date="2022-05-27 09:35:25" Creator="Pascal Neuperger" Comments="" ID="bf89c7502e3241fb05f5383352876c1d">
22
<Library_General_Settings>
33
<Package_File_Name>PNR_lib_JSONtext_Object_Serialization</Package_File_Name>
4-
<Library_Version>1.0.2.24</Library_Version>
4+
<Library_Version>1.0.3.25</Library_Version>
55
<Auto_Increment_Version>false</Auto_Increment_Version>
66
<Library_Source_Folder>.</Library_Source_Folder>
77
<Library_Output_Folder>..</Library_Output_Folder>
@@ -17,11 +17,11 @@
1717
</Library_General_Settings>
1818
<Advanced_Settings>
1919
<Package_Dependencies>
20-
<External_Dependencies>jdp_science_jsontext &gt;= 1.5.4.98</External_Dependencies>
21-
<External_Dependencies>jdp_science_lib_common_utilities &gt;= 1.2.2.13</External_Dependencies>
20+
<External_Dependencies>jdp_science_jsontext &gt;= 1.6.7.107</External_Dependencies>
21+
<External_Dependencies>jdp_science_lib_common_utilities &gt;= 1.4.0.17</External_Dependencies>
2222
<External_Dependencies>pnr_lib_labview_composition &gt;= 1.2.3.18</External_Dependencies>
23-
<Direct_Dependencies>jdp_science_jsontext-1.5.4.98</Direct_Dependencies>
24-
<Direct_Dependencies>jdp_science_lib_common_utilities-1.2.2.13</Direct_Dependencies>
23+
<Direct_Dependencies>jdp_science_jsontext-1.6.7.107</Direct_Dependencies>
24+
<Direct_Dependencies>jdp_science_lib_common_utilities-1.4.0.17</Direct_Dependencies>
2525
<Direct_Dependencies>pnr_lib_labview_composition-1.2.3.18</Direct_Dependencies>
2626
</Package_Dependencies>
2727
<Custom_Action_VIs>
@@ -47,7 +47,7 @@ Only serializes classes that inherit from JSON Serializable that defines methods
4747
<Copyright>Copyright (c) 2021-2022, Pascal Neuperger</Copyright>
4848
<Packager>Pascal Neuperger</Packager>
4949
<URL>https://github.com/LogMANOriginal/JSONtext-Object-Serialization</URL>
50-
<Release_Notes>- [#21] Fixed an issue in "Generic Object Serializer" that resulted in an error when attempting to de-serialize a class without data member using inline type name handling.</Release_Notes>
50+
<Release_Notes>- [#22] Changed minimum required version for JSONtext to 1.6.7. That version addresses an issue which resulted in incorrect values for numeric types with less than 32 bits.</Release_Notes>
5151
</Description>
5252
<Destinations>
5353
<Toolkit_VIs>
@@ -299,7 +299,7 @@ Only serializes classes that inherit from JSON Serializable that defines methods
299299
<Path>JSON Serializable Serializer Constant.vi</Path>
300300
<VI_Title/>
301301
</Items_Data>
302-
<GUID>4B4687354A4399285DA6A1543BF62B09</GUID>
302+
<GUID>7EBFDF826A4235191D26058A74809687</GUID>
303303
</Functions_Palette_Data>
304304
</Library_Palette_Definition>
305305
</VI_Package_Builder_Settings>

.vipc

803 Bytes
Binary file not shown.

Generic Object Serializer Tests/Generic Object Serializer Tests.lvlib

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
<Item Name="Dictionary.lvclass" Type="LVClass" URL="../Dictionary/Dictionary.lvclass"/>
2121
<Item Name="Create Dummy Country Data.vi" Type="VI" URL="../Create Dummy Country Data.vi"/>
2222
<Item Name="No Data Member Subclass.lvclass" Type="LVClass" URL="../No Data Member Subclass/No Data Member Subclass.lvclass"/>
23+
<Item Name="Numeric Types.lvclass" Type="LVClass" URL="../Numeric Types/Numeric Types.lvclass"/>
2324
</Item>
2425
<Item Name="Type Name Handling.lvlib" Type="Library" URL="../Type Name Handling/Type Name Handling.lvlib"/>
2526
<Item Name="LabVIEW Extensions.lvlib" Type="Library" URL="../LabVIEW Extensions/LabVIEW Extensions.lvlib"/>
@@ -51,4 +52,15 @@
5152
<Item Name="JSON to LVObject - Object with Array of Objects - Returns Object.vi" Type="VI" URL="../JSON to LVObject - Object with Array of Objects - Returns Object.vi"/>
5253
<Item Name="JSON to LVObject - Object with Array of Cluster with Object - Returns Object.vi" Type="VI" URL="../JSON to LVObject - Object with Array of Cluster with Object - Returns Object.vi"/>
5354
<Item Name="JSON to LVObject - Dictionary of Object with Array of Objects - Returns Object.vi" Type="VI" URL="../JSON to LVObject - Dictionary of Object with Array of Objects - Returns Object.vi"/>
55+
<Item Name="JSON to LVObject - U16 Enum Member - Should Parse Value.vi" Type="VI" URL="../JSON to LVObject - U16 Enum Member - Should Parse Value.vi"/>
56+
<Item Name="JSON to LVObject - U32 Enum Member - Should Parse Value.vi" Type="VI" URL="../JSON to LVObject - U32 Enum Member - Should Parse Value.vi"/>
57+
<Item Name="JSON to LVObject - U8 Enum Member - Should Parse Value.vi" Type="VI" URL="../JSON to LVObject - U8 Enum Member - Should Parse Value.vi"/>
58+
<Item Name="JSON to LVObject - U8 Member - Should Parse Value.vi" Type="VI" URL="../JSON to LVObject - U8 Member - Should Parse Value.vi"/>
59+
<Item Name="JSON to LVObject - U16 Member - Should Parse Value.vi" Type="VI" URL="../JSON to LVObject - U16 Member - Should Parse Value.vi"/>
60+
<Item Name="JSON to LVObject - U32 Member - Should Parse Value.vi" Type="VI" URL="../JSON to LVObject - U32 Member - Should Parse Value.vi"/>
61+
<Item Name="JSON to LVObject - U64 Member - Should Parse Value.vi" Type="VI" URL="../JSON to LVObject - U64 Member - Should Parse Value.vi"/>
62+
<Item Name="JSON to LVObject - I8 Member - Should Parse Value.vi" Type="VI" URL="../JSON to LVObject - I8 Member - Should Parse Value.vi"/>
63+
<Item Name="JSON to LVObject - I16 Member - Should Parse Value.vi" Type="VI" URL="../JSON to LVObject - I16 Member - Should Parse Value.vi"/>
64+
<Item Name="JSON to LVObject - I32 Member - Should Parse Value.vi" Type="VI" URL="../JSON to LVObject - I32 Member - Should Parse Value.vi"/>
65+
<Item Name="JSON to LVObject - I64 Member - Should Parse Value.vi" Type="VI" URL="../JSON to LVObject - I64 Member - Should Parse Value.vi"/>
5466
</Library>
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.

0 commit comments

Comments
 (0)