File Coverage

ulib/compare.c
Criterion Covered Total %
statement 41 41 100.0
branch 36 72 50.0
condition n/a
subroutine n/a
pod n/a
total 77 113 68.1


line stmt bran cond sub pod time code
1             #ifdef __cplusplus
2             extern "C" {
3             #endif
4              
5             #include "ulib/compare.h"
6             #include "ulib/unpack.h"
7             #include "ulib/util.h"
8              
9             #ifdef __cplusplus
10             }
11             #endif
12              
13             #define UUCMP(u1,u2) if (u1 != u2) return((u1) > (u2) ? 1 : -1);
14              
15 19           IV uu_cmp_struct1(const struct_uu_t *us1, const struct_uu_t *us2) {
16 19 100         UUCMP(us1->v1.time_low, us2->v1.time_low);
    100          
17 15 50         UUCMP(us1->v1.time_mid, us2->v1.time_mid);
    0          
18 15 50         UUCMP(us1->v1.time_high_and_version, us2->v1.time_high_and_version);
    0          
19 15 50         UUCMP(us1->v1.clock_seq_and_variant, us2->v1.clock_seq_and_variant);
    0          
20 15           return memcmp(us1->v1.node, us2->v1.node, 6);
21             }
22              
23             /* XXX missing v3 */
24              
25 117           IV uu_cmp_struct4(const struct_uu_t *us1, const struct_uu_t *us2) {
26 117 100         UUCMP(us1->v4.rand_a, us2->v4.rand_a);
    100          
27 15 50         UUCMP(us1->v4.rand_b_and_version, us2->v4.rand_b_and_version);
    0          
28 15 50         UUCMP(us1->v4.rand_c_and_variant, us2->v4.rand_c_and_variant);
    0          
29 15 50         UUCMP(us1->v4.rand_d, us2->v4.rand_d);
    0          
30 15           return 0;
31             }
32              
33             /* XXX missing v5 */
34              
35 15           IV uu_cmp_struct6(const struct_uu_t *us1, const struct_uu_t *us2) {
36 15 50         UUCMP(us1->v6.time_high, us2->v6.time_high);
    0          
37 15 50         UUCMP(us1->v6.time_mid, us2->v6.time_mid );
    0          
38 15 100         UUCMP(us1->v6.time_low_and_version, us2->v6.time_low_and_version );
    100          
39 13 50         UUCMP(us1->v6.clock_seq_and_variant, us2->v6.clock_seq_and_variant);
    0          
40 13           return memcmp(us1->v6.node, us2->v6.node, 6);
41             return 0;
42             }
43              
44 15           IV uu_cmp_struct7(const struct_uu_t *us1, const struct_uu_t *us2) {
45 15 50         UUCMP(us1->v7.time_high, us2->v7.time_high);
    0          
46 15 50         UUCMP(us1->v7.time_low, us2->v7.time_low );
    0          
47 15 100         UUCMP(us1->v7.rand_a_and_version, us2->v7.rand_a_and_version);
    100          
48 13 50         UUCMP(us1->v7.rand_b_and_variant, us2->v7.rand_b_and_variant);
    0          
49 13           return 0;
50             }
51              
52 296           IV uu_cmp_binary(const uu_t uu1, const uu_t uu2) {
53             IV typ1, typ2, var1, var2;
54             struct_uu_t us1, us2;
55              
56 296           uu_unpack(uu1, &us1);
57 296           uu_unpack(uu2, &us2);
58              
59 296           var1 = uu_variant(&us1);
60 296           var2 = uu_variant(&us2);
61              
62 296 100         if (var1 != var2)
63 23 100         return var1 > var2 ? 1 : -1;
64              
65 273           typ1 = uu_type(&us1);
66 273           typ2 = uu_type(&us2);
67              
68 273 100         if (typ1 != typ2)
69 62 100         return typ1 > typ2 ? 1 : -1;
70              
71 211           switch(typ1) {
72 19           case 1: return uu_cmp_struct1(&us1, &us2);
73 117           case 4: return uu_cmp_struct4(&us1, &us2);
74 15           case 6: return uu_cmp_struct6(&us1, &us2);
75 15           case 7: return uu_cmp_struct7(&us1, &us2);
76             }
77              
78             //return uu_cmp_struct(&us1, &us2);
79 45           return 0;
80             }
81              
82             /* ex:set ts=2 sw=2 itab=spaces: */