Skip to content

Commit c84eead

Browse files
authored
PR #12468 from Eran: update rsutils::version to 4x16
2 parents bfe95cd + 195b345 commit c84eead

File tree

3 files changed

+53
-64
lines changed

3 files changed

+53
-64
lines changed

third-party/rsutils/include/rsutils/version.h

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ namespace rsutils {
1919
//
2020
struct version
2121
{
22-
typedef unsigned sub_type;
22+
typedef uint16_t sub_type;
2323
typedef uint64_t number_type;
2424

2525
number_type number;
@@ -47,12 +47,12 @@ struct version
4747

4848
void clear() { number = 0; }
4949

50-
sub_type get_major() const { return ( number >> ( 8 * 7 ) ) & 0xFF; }
51-
sub_type get_minor() const { return ( number >> ( 8 * 5 ) ) & 0xFFFF; }
52-
sub_type get_patch() const { return ( number >> ( 8 * 4 ) ) & 0xFF; }
53-
sub_type get_build() const { return number & 0xFFFFFFFF; }
50+
sub_type get_major() const { return sub_type( number >> ( 8 * 6 ) ); }
51+
sub_type get_minor() const { return sub_type( number >> ( 8 * 4 ) ); }
52+
sub_type get_patch() const { return sub_type( number >> ( 8 * 2 ) ); }
53+
sub_type get_build() const { return sub_type( number ); }
5454

55-
version without_build() const { return version( number & ~0xFFFFFFFFULL ); }
55+
version without_build() const { return version( number & ~0xFFFFULL ); }
5656

5757
bool operator<=( version const & other ) const { return number <= other.number; }
5858
bool operator==( version const & other ) const { return number == other.number; }

third-party/rsutils/src/version.cpp

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,7 @@ namespace rsutils {
99

1010

1111
version::version( sub_type m, sub_type n, sub_type p, sub_type b )
12-
: version( ( ( m & 0xFFULL ) << ( 8 * 7 ) ) + ( ( n & 0xFFFFULL ) << ( 8 * 5 ) )
13-
+ ( ( p & 0xFFULL ) << ( 8 * 4 ) ) + ( b & 0xFFFFFFFFULL ) )
12+
: version( ( uint64_t( m ) << ( 8 * 6 ) ) + ( uint64_t( n ) << ( 8 * 4 ) ) + ( uint64_t( p ) << ( 8 * 2 ) ) + b )
1413
{
1514
// Invalidate if any overflow
1615
if( m != get_major() )
@@ -37,7 +36,7 @@ version::version( char const * base )
3736
return; // If 0, unexpected; otherwise invalid
3837
major *= 10;
3938
major += *ptr - '0';
40-
if( major > 0xFF )
39+
if( major > 0xFFFF )
4140
return; // Overflow
4241
++ptr;
4342
}
@@ -69,14 +68,14 @@ version::version( char const * base )
6968
return; // Invalid
7069
patch *= 10;
7170
patch += *ptr - '0';
72-
if( patch > 0xFF )
71+
if( patch > 0xFFFF )
7372
return; // Overflow
7473
++ptr;
7574
}
7675
if( ptr == base )
7776
return; // No patch
7877

79-
uint64_t build = 0;
78+
unsigned build = 0;
8079
if( *ptr )
8180
{
8281
base = ++ptr;
@@ -86,15 +85,15 @@ version::version( char const * base )
8685
return; // Invalid
8786
build *= 10;
8887
build += *ptr - '0';
89-
if( build > 0xFFFFFFFFULL )
88+
if( build > 0xFFFF )
9089
return; // Overflow
9190
++ptr;
9291
}
9392
if( ptr == base )
9493
return; // No build, but there was a period at the end...!?
9594
}
9695

97-
number = version( major, minor, patch, (unsigned)build ).number;
96+
number = version( major, minor, patch, build ).number;
9897
}
9998

10099

@@ -106,8 +105,6 @@ std::string version::to_string() const
106105

107106
std::ostream & operator<<( std::ostream & os, version const & v )
108107
{
109-
// NOTE: FW versions were padded to 2 characters with leading 0s:
110-
// os << std::setfill('0') << std::setw(2) << v.major() << '.' ...
111108
os << v.get_major() << '.' << v.get_minor() << '.' << v.get_patch();
112109
if( v.get_build() )
113110
os << '.' << v.get_build();

unit-tests/rsutils/test-version.py

Lines changed: 41 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -7,76 +7,68 @@
77

88
#############################################################################################
99
#
10-
test.start( "String constructor" )
11-
try:
12-
test.check( not version() )
13-
14-
test.check( not version( "" ))
15-
test.check( not version( "1" ))
16-
test.check( not version( "1." ))
17-
test.check( not version( "1.2" ))
18-
test.check( not version( "1.2." ))
19-
test.check( version( "1.2.3" ))
20-
test.check( not version( "1.2.3." ))
21-
test.check( version( "1.2.3.4" ))
22-
test.check( not version( "1.2.3.4." ))
23-
test.check( not version( "1 . 2.3.4" ));
24-
test.check( not version( ".1.2.3.4" ))
25-
test.check( not version( "0.0.0.0" ))
26-
test.check( version( "1.0.0.0" ))
27-
test.check( version( "0.1.0.0" ))
28-
test.check( version( "0.0.1.0" ))
29-
test.check( version( "0.0.0.1" ))
30-
test.check( not version( ".2.3.4" ))
31-
test.check( not version( "1..2.4" ))
32-
test.check( not version( "1.2..4" ))
33-
34-
test.check( version( "255.2.3.4" ))
35-
test.check( not version( "256.2.3.4" ))
36-
test.check( version( "1.65535.3.4" ))
37-
test.check( not version( "1.65536.3.4" ))
38-
test.check( version( "1.2.255.4" ))
39-
test.check( not version( "1.2.256.4" ))
40-
test.check( version( "1.2.3.4294967295" ))
41-
test.check( not version( "1.2.3.4294967296" ))
42-
43-
test.check( not version( "xxxxxxxxxxx" ))
44-
except:
45-
test.unexpected_exception()
46-
test.finish()
10+
with test.closure( "String constructor" ):
11+
test.check_false( version() )
12+
13+
test.check_false( version( "" ))
14+
test.check_false( version( "1" ))
15+
test.check_false( version( "1." ))
16+
test.check_false( version( "1.2" ))
17+
test.check_false( version( "1.2." ))
18+
test.check ( version( "1.2.3" ))
19+
test.check_false( version( "1.2.3." ))
20+
test.check ( version( "1.2.3.4" ))
21+
test.check_false( version( "1.2.3.4." ))
22+
test.check_false( version( "1 . 2.3.4" ));
23+
test.check_false( version( ".1.2.3.4" ))
24+
test.check_false( version( "0.0.0.0" ))
25+
test.check ( version( "1.0.0.0" ))
26+
test.check ( version( "0.1.0.0" ))
27+
test.check ( version( "0.0.1.0" ))
28+
test.check ( version( "0.0.0.1" ))
29+
test.check_false( version( ".2.3.4" ))
30+
test.check_false( version( "1..2.4" ))
31+
test.check_false( version( "1.2..4" ))
32+
33+
test.check ( version( "65535.2.3.4" ))
34+
test.check_false( version( "65536.2.3.4" ))
35+
test.check ( version( "1.65535.3.4" ))
36+
test.check_false( version( "1.65536.3.4" ))
37+
test.check ( version( "1.2.65535.4" ))
38+
test.check_false( version( "1.2.65536.4" ))
39+
test.check ( version( "1.2.3.65535" ))
40+
test.check_false( version( "1.2.3.65536" ))
41+
42+
test.check_false( version( "xxxxxxxxxxx" ))
4743
#
4844
#############################################################################################
4945
#
50-
test.start( "Number constructor" )
51-
try:
46+
with test.closure( "Number constructor" ):
5247
test.check( not version.from_number(0) )
5348
test.check( version( 1, 2, 3 ))
5449
test.check( version( 1, 2, 3, 4 ))
5550
test.check_throws( lambda: version( -1, 2, 3, 4 ), TypeError )
5651
test.check_throws( lambda: version( 1, -2, 3, 4 ), TypeError )
5752
test.check_throws( lambda: version( 1, 2, -3, 4 ), TypeError )
5853
test.check_throws( lambda: version( 1, 2, 3, -4 ), TypeError )
59-
test.check( version( 0xFF, 0xFFFF, 0xFF, 0xFFFFFFFF ))
60-
test.check( not version( 0x100, 0xFFFF, 0xFF, 0xFFFFFFFF ))
61-
test.check( not version( 0xFF, 0x10000, 0xFF, 0xFFFFFFFF ))
62-
test.check( not version( 0xFF, 0xFFFF, 0x100, 0xFFFFFFFF ))
63-
#test.check( not version( 0xFF, 0xFFFF, 0xFF, 0x100000000 )) Python throws - type error
54+
test.check( version( 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF ))
55+
test.check_throws( lambda: version( 0x10000, 0xFFFF, 0xFFFF, 0xFFFF ), TypeError )
56+
test.check_throws( lambda: version( 0xFFFF, 0x10000, 0xFFFF, 0xFFFF ), TypeError )
57+
test.check_throws( lambda: version( 0xFFFF, 0xFFFF, 0x10000, 0xFFFF ), TypeError )
58+
test.check_throws( lambda: version( 0xFFFF, 0xFFFF, 0xFFFF, 0x10000 ), TypeError )
6459

6560
v1234 = version.from_number( version( 1, 2, 3, 1234 ).number )
6661
test.check_equal( v1234.major(), 1 );
6762
test.check_equal( v1234.minor(), 2 );
6863
test.check_equal( v1234.patch(), 3 );
6964
test.check_equal( v1234.build(), 1234 );
70-
except:
71-
test.unexpected_exception()
72-
test.finish()
7365
#
7466
#############################################################################################
7567
#
7668
test.start( "Comparisons" )
7769
try:
7870
v0 = version()
79-
vN = version.from_number( 72059805946086610 )
71+
vN = version.from_number( 281483566843090 )
8072
v1233 = version( "1.2.3.1233" )
8173
v1234 = version( "1.2.3.1234" )
8274
v1235 = version( "1.2.3.1235" )
@@ -88,7 +80,7 @@
8880
test.check_equal( v0, version( "0.0.0.0" ) )
8981
test.check_equal( v0, version( "123" ) )
9082
test.check ( vN != v0 );
91-
83+
9284
test.check_equal( vN, v1234 );
9385
test.check ( v1234 == v1234 );
9486
test.check_false( v1234 != v1234 );

0 commit comments

Comments
 (0)