version

Versioning specification based on semver 2.0
git clone https://noulin.net/git/version.git
Log | Files | Refs | README | LICENSE

testVersion.c (23267B)


      1 #! /usr/bin/env sheepy
      2 /* or direct path to sheepy: #! /usr/local/bin/sheepy */
      3 
      4 /** \file
      5  * Each test must be independent and self contained
      6  */
      7 
      8 #include <check.h>
      9 
     10 //START MEM TEST ANCHOR
     11 
     12 #include "libsheepyObject.h"
     13 #include "shpPackages/short/short.h"
     14 #include "version.h"
     15 
     16 int argc; char **argv;
     17 
     18 versiont ver;
     19 
     20 
     21 START_TEST(basetT)
     22 
     23   // STEPS
     24   // init
     25   // init allocate
     26   // terminate
     27   // allocate
     28   // string
     29   // duplicate
     30 
     31   // init
     32   initiateVersion(&ver);
     33   freeO(&ver);
     34 
     35   // init allocate
     36   versiont *v;
     37   initiateAllocateVersion(&v);
     38 
     39   // terminate
     40   terminateO(v);
     41 
     42   // allocate
     43   v  = allocVersion("");
     44 
     45   // string
     46   char *s = toStringO(v);
     47 
     48   ck_assert_str_eq(s, "0.0.0");
     49   free(s);
     50 
     51   // duplicate
     52   versiont *oDup = duplicateO(v);
     53   terminateO(oDup);
     54   terminateO(v);
     55 
     56 END_TEST
     57 
     58 
     59 START_TEST(validT)
     60 
     61   createVersion(ver);
     62 
     63   ck_assert(validO(&ver, "1.2.3.0"));
     64   ck_assert(validO(&ver, "10.2.3"));
     65   ck_assert(validO(&ver, "0.2.3"));
     66   ck_assert(validO(&ver, "0.2"));
     67   ck_assert(validO(&ver, "0-p"));
     68   ck_assert(validO(&ver, "0-p+b"));
     69   ck_assert(validO(&ver, "0+b"));
     70   ck_assert(validO(&ver, "0.2.3-p"));
     71   ck_assert(validO(&ver, "0.2.3.0-p+b"));
     72   ck_assert(validO(&ver, "0.2.3+b"));
     73   ck_assert(validO(&ver, "0.2-pre"));
     74   ck_assert(validO(&ver, "0.2-pre-234"));
     75   ck_assert(validO(&ver, "0.2-pre+r3"));
     76   ck_assert(validO(&ver, "0.2-pre+3-r"));
     77   ck_assert(validO(&ver, "0.2-pre-234+r3r"));
     78   ck_assert(validO(&ver, "0.2-pre.exp34"));
     79   ck_assert(validO(&ver, "0.2-pre.exp-wd3-0"));
     80 
     81   ck_assert(!validO(&ver, "0.2.3-+b"));
     82   ck_assert(!validO(&ver, "0.2.3-."));
     83   ck_assert(!validO(&ver, "0.2.3--"));
     84   ck_assert(!validO(&ver, "0.2.3.-p"));
     85   ck_assert(!validO(&ver, "0.2.3.+b"));
     86   ck_assert(!validO(&ver, "0.2.3+."));
     87   ck_assert(!validO(&ver, "0.2.3+-"));
     88   ck_assert(!validO(&ver, "0.2.3+b."));
     89   ck_assert(!validO(&ver, "0.2.3+b-"));
     90   ck_assert(!validO(&ver, "0.2.3+b+"));
     91   ck_assert(!validO(&ver, "1.2-pre"));
     92   ck_assert(!validO(&ver, "1.-pre"));
     93   ck_assert(!validO(&ver, "1.2+b"));
     94   ck_assert(!validO(&ver, "1.+b"));
     95   ck_assert(!validO(&ver, "0.2-"));
     96   ck_assert(!validO(&ver, "0.2-pre+"));
     97   ck_assert(!validO(&ver, "0.2.3-"));
     98   ck_assert(!validO(&ver, "0.2.3.0-+b"));
     99   ck_assert(!validO(&ver, "0.2.3.0-p+"));
    100   ck_assert(!validO(&ver, "0.2-pre+3r"));
    101   ck_assert(!validO(&ver, "0.2-pre.exp-wd3-00"));
    102   ck_assert(!validO(&ver, "0.2-0pre.exp-wd3"));
    103   ck_assert(!validO(&ver, "0.2-pre.01-wd3"));
    104   ck_assert(!validO(&ver, ".3.3"));
    105   ck_assert(!validO(&ver, "3.3."));
    106   ck_assert(!validO(&ver, "0..3"));
    107   ck_assert(!validO(&ver, "1.2.3.00"));
    108   ck_assert(!validO(&ver, "00.2.3"));
    109   ck_assert(!validO(&ver, "a.b.c"));
    110   ck_assert(!validO(&ver, "=1.3.3"));
    111 
    112   freeO(&ver);
    113 
    114 END_TEST
    115 
    116 START_TEST(parseT)
    117 
    118   createVersion(ver);
    119 
    120   ck_assert(parseO(&ver, "1.2.3.0"));
    121   ck_assert(parseO(&ver, "10.2.3"));
    122   ck_assert(parseO(&ver, "0.2.3"));
    123   ck_assert(parseO(&ver, "0.2"));
    124   ck_assert(parseO(&ver, "0-p"));
    125   ck_assert(parseO(&ver, "0-p+b"));
    126   ck_assert(parseO(&ver, "0+b"));
    127   ck_assert(parseO(&ver, "0.2.3-p"));
    128   ck_assert(parseO(&ver, "0.2.3.0-p+b"));
    129   ck_assert(parseO(&ver, "0.2.3+b"));
    130   ck_assert(parseO(&ver, "0.2-pre"));
    131   ck_assert(parseO(&ver, "0.2-pre-234"));
    132   ck_assert(parseO(&ver, "0.2-pre+r3"));
    133   ck_assert(parseO(&ver, "0.2-pre+3-r"));
    134   ck_assert(parseO(&ver, "0.2-pre-234+r3r"));
    135   ck_assert(parseO(&ver, "0.2-pre.exp34"));
    136   ck_assert(parseO(&ver, "0.2-pre.exp-wd3-0"));
    137   ck_assert(parseO(&ver, "0.2.3+b-"));
    138   ck_assert(parseO(&ver, "0.2.3+b+"));
    139   ck_assert(parseO(&ver, "1.2-pre"));
    140   ck_assert(parseO(&ver, "1.2+b"));
    141   ck_assert(parseO(&ver, "0.2-"));
    142   ck_assert(parseO(&ver, "0.2-pre+"));
    143   ck_assert(parseO(&ver, "0.2.3-"));
    144   ck_assert(parseO(&ver, "0.2.3.0-p+"));
    145   ck_assert(parseO(&ver, ".3.3"));
    146   ck_assert(parseO(&ver, "a.b.c"));
    147   ck_assert(parseO(&ver, "=1.3.3"));
    148 
    149   ck_assert(!parseO(&ver, "0.2-pre+3r"));
    150   ck_assert(!parseO(&ver, "0.2.3-+b"));
    151   ck_assert(!parseO(&ver, "0.2.3-."));
    152   ck_assert(!parseO(&ver, "0.2.3--"));
    153   ck_assert(!parseO(&ver, "0.2.3.-p"));
    154   ck_assert(!parseO(&ver, "0.2.3.+b"));
    155   ck_assert(!parseO(&ver, "0.2.3+."));
    156   ck_assert(!parseO(&ver, "0.2.3+-"));
    157   ck_assert(!parseO(&ver, "0.2.3+b."));
    158   ck_assert(!parseO(&ver, "1.-pre"));
    159   ck_assert(!parseO(&ver, "1.+b"));
    160   ck_assert(!parseO(&ver, "0.2.3.0-+b"));
    161   ck_assert(!parseO(&ver, "0.2-pre.exp-wd3-00"));
    162   ck_assert(!parseO(&ver, "0.2-0pre.exp-wd3"));
    163   ck_assert(!parseO(&ver, "0.2-pre.01-wd3"));
    164   ck_assert(!parseO(&ver, "3.3."));
    165   ck_assert(!parseO(&ver, "0..3"));
    166   ck_assert(!parseO(&ver, "1.2.3.00"));
    167   ck_assert(!parseO(&ver, "00.2.3"));
    168 
    169   freeO(&ver);
    170 
    171 END_TEST
    172 
    173 START_TEST(parseStrictT)
    174 
    175   createVersion(ver);
    176 
    177   ck_assert(parseStrictO(&ver, "1.2.3.0"));
    178   ck_assert(parseStrictO(&ver, "10.2.3"));
    179   ck_assert(parseStrictO(&ver, "0.2.3"));
    180   ck_assert(parseStrictO(&ver, "0.2"));
    181   ck_assert(parseStrictO(&ver, "0-p"));
    182   ck_assert(parseStrictO(&ver, "0-p+b"));
    183   ck_assert(parseStrictO(&ver, "0+b"));
    184   ck_assert(parseStrictO(&ver, "0.2.3-p"));
    185   ck_assert(parseStrictO(&ver, "0.2.3.0-p+b"));
    186   ck_assert(parseStrictO(&ver, "0.2.3+b"));
    187   ck_assert(parseStrictO(&ver, "0.2-pre"));
    188   ck_assert(parseStrictO(&ver, "0.2-pre-234"));
    189   ck_assert(parseStrictO(&ver, "0.2-pre+r3"));
    190   ck_assert(parseStrictO(&ver, "0.2-pre+3-r"));
    191   ck_assert(parseStrictO(&ver, "0.2-pre-234+r3r"));
    192   ck_assert(parseStrictO(&ver, "0.2-pre.exp34"));
    193   ck_assert(parseStrictO(&ver, "0.2-pre.exp-wd3-0"));
    194   ck_assert(parseStrictO(&ver, "=1.3.3"));
    195 
    196   ck_assert(!parseStrictO(&ver, "0.2.3-+b"));
    197   ck_assert(!parseStrictO(&ver, "0.2.3-."));
    198   ck_assert(!parseStrictO(&ver, "0.2.3--"));
    199   ck_assert(!parseStrictO(&ver, "0.2.3.-p"));
    200   ck_assert(!parseStrictO(&ver, "0.2.3.+b"));
    201   ck_assert(!parseStrictO(&ver, "0.2.3+."));
    202   ck_assert(!parseStrictO(&ver, "0.2.3+-"));
    203   ck_assert(!parseStrictO(&ver, "0.2.3+b."));
    204   ck_assert(!parseStrictO(&ver, "0.2.3+b-"));
    205   ck_assert(!parseStrictO(&ver, "0.2.3+b+"));
    206   ck_assert(!parseStrictO(&ver, "1.2-pre"));
    207   ck_assert(!parseStrictO(&ver, "1.-pre"));
    208   ck_assert(!parseStrictO(&ver, "1.2+b"));
    209   ck_assert(!parseStrictO(&ver, "1.+b"));
    210   ck_assert(!parseStrictO(&ver, "0.2-"));
    211   ck_assert(!parseStrictO(&ver, "0.2-pre+"));
    212   ck_assert(!parseStrictO(&ver, "0.2.3-"));
    213   ck_assert(!parseStrictO(&ver, "0.2.3.0-+b"));
    214   ck_assert(!parseStrictO(&ver, "0.2.3.0-p+"));
    215   ck_assert(!parseStrictO(&ver, "0.2-pre+3r"));
    216   ck_assert(!parseStrictO(&ver, "0.2-pre.exp-wd3-00"));
    217   ck_assert(!parseStrictO(&ver, "0.2-0pre.exp-wd3"));
    218   ck_assert(!parseStrictO(&ver, "0.2-pre.01-wd3"));
    219   ck_assert(!parseStrictO(&ver, ".3.3"));
    220   ck_assert(!parseStrictO(&ver, "3.3."));
    221   ck_assert(!parseStrictO(&ver, "0..3"));
    222   ck_assert(!parseStrictO(&ver, "1.2.3.00"));
    223   ck_assert(!parseStrictO(&ver, "00.2.3"));
    224   ck_assert(!parseStrictO(&ver, "a.b.c"));
    225 
    226   freeO(&ver);
    227 
    228 END_TEST
    229 
    230 
    231 
    232 START_TEST(cleanT)
    233 
    234   createVersion(ver);
    235 
    236   char *v = strdup("#$%23.34#4.53");
    237 
    238   ver.f->clean(&ver, v);
    239 
    240   ck_assert_str_eq(v, "23.344.53");
    241 
    242   free(v);
    243   freeO(&ver);
    244 
    245 END_TEST
    246 
    247 
    248 START_TEST(equalT)
    249 
    250   createVersion(ver);
    251   createVersion(ver2);
    252 
    253   parseO(&ver, "v1");
    254   parseO(&ver2,"1.0.0");
    255   ck_assert(eqO(&ver, &ver2));
    256 
    257   incrO(&ver, releaseVer);
    258   ck_assert(!eqO(&ver, &ver2));
    259 
    260   freeO(&ver2);
    261   freeO(&ver);
    262 
    263 END_TEST
    264 
    265 START_TEST(equalST)
    266 
    267   createVersion(ver);
    268 
    269   parseO(&ver, "v1");
    270   ck_assert(eqSO(&ver, "1.0"));
    271 
    272   incrO(&ver, releaseVer);
    273   ck_assert(!eqSO(&ver, "1.0"));
    274 
    275   freeO(&ver);
    276 
    277 END_TEST
    278 
    279 START_TEST(equalSST)
    280 
    281   createVersion(ver);
    282 
    283   ck_assert(eqSSO(&ver, "v1", "1.0"));
    284 
    285   ck_assert(!eqSSO(&ver,"v1", "1.0-pre"));
    286 
    287   freeO(&ver);
    288 
    289 END_TEST
    290 
    291 START_TEST(cmpT)
    292 
    293   createVersion(ver);
    294   createVersion(ver2);
    295 
    296   parseO(&ver, "v1");
    297   parseO(&ver2,"1.0.0");
    298   ck_assert_int_eq(cmpO(&ver, &ver2), 0);
    299 
    300   incrO(&ver, releaseVer);
    301   ck_assert_int_eq(cmpO(&ver, &ver2), 1);
    302 
    303   incrO(&ver2, releaseVer);
    304   incrO(&ver2, releaseVer);
    305   ck_assert_int_eq(cmpO(&ver, &ver2), -1);
    306 
    307   freeO(&ver2);
    308   freeO(&ver);
    309 
    310 END_TEST
    311 
    312 START_TEST(cmpST)
    313 
    314   createVersion(ver);
    315 
    316   parseO(&ver, "v1");
    317   ck_assert_int_eq(cmpSO(&ver, "1.0"), 0);
    318 
    319   incrO(&ver, releaseVer);
    320   ck_assert_int_eq(cmpSO(&ver, "1.0"), 1);
    321 
    322   ck_assert_int_eq(cmpSO(&ver, "3.1"), -1);
    323 
    324   freeO(&ver);
    325 
    326 END_TEST
    327 
    328 START_TEST(cmpSST)
    329 
    330   createVersion(ver);
    331 
    332   ck_assert_int_eq(cmpSSO(&ver, "v1", "1.0"), 0);
    333 
    334   ck_assert_int_eq(cmpSSO(&ver, "1.1", "1.0"), 1);
    335 
    336   ck_assert_int_eq(cmpSSO(&ver, "1.0", "1.1"), -1);
    337 
    338   freeO(&ver);
    339 
    340 END_TEST
    341 
    342 START_TEST(incrT)
    343 
    344   createVersion(ver);
    345 
    346   parseO(&ver, "0.0.0");
    347 
    348   incrO(&ver, releaseVer);
    349   ck_assert_int_eq(ver.release, 1);
    350   ck_assert_int_eq(ver.major, 0);
    351   ck_assert_int_eq(ver.minor, 0);
    352   ck_assert_int_eq(ver.patch, 0);
    353 
    354   incrO(&ver, majorVer);
    355   ck_assert_int_eq(ver.release, 1);
    356   ck_assert_int_eq(ver.major, 1);
    357   ck_assert_int_eq(ver.minor, 0);
    358   ck_assert_int_eq(ver.patch, 0);
    359 
    360   incrO(&ver, minorVer);
    361   ck_assert_int_eq(ver.release, 1);
    362   ck_assert_int_eq(ver.major, 1);
    363   ck_assert_int_eq(ver.minor, 1);
    364   ck_assert_int_eq(ver.patch, 0);
    365 
    366   incrO(&ver, patchVer);
    367   ck_assert_int_eq(ver.release, 1);
    368   ck_assert_int_eq(ver.major, 1);
    369   ck_assert_int_eq(ver.minor, 1);
    370   ck_assert_int_eq(ver.patch, 1);
    371 
    372   freeO(&ver);
    373 
    374 
    375 END_TEST
    376 
    377 START_TEST(sortT)
    378 
    379   createVersion(ver);
    380 
    381   var arr = createSA("1.1+b.1", "1.1+b", "1.1", "2.0", "1.0", "1.1.1", "1.1-pr", "1.1-pr.1");
    382   var ref = createSA("1.0", "1.1-pr", "1.1-pr.1", "1.1", "1.1+b", "1.1+b.1", "1.1.1", "2.0");
    383 
    384   var sorted = vsortO(&ver, arr);
    385 
    386   ck_assert(eqG(sorted, ref));
    387 
    388   terminateManyG(arr,sorted,ref);
    389 
    390   freeO(&ver);
    391 
    392 END_TEST
    393 
    394 START_TEST(satisfiesT)
    395 
    396   createVersion(ver);
    397 
    398   parseO(&ver, "ver-1.1");
    399 
    400   ck_assert(satisfiesO(&ver, "1.1"));
    401   ck_assert(satisfiesO(&ver, "=1.1"));
    402 
    403   // the comparator >=1.2.7 would match the versions 1.2.7, 1.2.8, 2.5.3, and 1.3.9, but not the versions 1.2.6 or 1.1.0
    404   parseO(&ver, "ver-1.2.7");
    405   ck_assert(satisfiesO(&ver, ">=1.2.7"));
    406   parseO(&ver, "ver-1.2.8");
    407   ck_assert(satisfiesO(&ver, ">=1.2.7"));
    408   parseO(&ver, "ver-2.5.3");
    409   ck_assert(satisfiesO(&ver, ">=1.2.7"));
    410   parseO(&ver, "ver-1.3.9");
    411   ck_assert(satisfiesO(&ver, ">=1.2.7"));
    412   parseO(&ver, "ver-1.2.6");
    413   ck_assert(!satisfiesO(&ver, ">=1.2.7"));
    414   parseO(&ver, "ver-1.1.0");
    415   ck_assert(!satisfiesO(&ver, ">=1.2.7"));
    416   parseO(&ver, "ver-1.2.7-pre");
    417   ck_assert(!satisfiesO(&ver, ">=1.2.7"));
    418 
    419   // the comparator >1.2.7- would match 1.2.7 and 1.2.7-alpha.1
    420   parseO(&ver, "ver-1.2.7");
    421   ck_assert(satisfiesO(&ver, ">=1.2.7-"));
    422   parseO(&ver, "ver-1.2.7-alpha.1");
    423   ck_assert(satisfiesO(&ver, ">=1.2.7-"));
    424 
    425   // the comparator >=1.2.7+ would match 1.2.7+arch64.build-1 and 1.2.7 but not and 1.2.7-alpha.1
    426   parseO(&ver, "ver-1.2.7");
    427   ck_assert(satisfiesO(&ver, ">=1.2.7+"));
    428   parseO(&ver, "ver-1.2.7+arch64.build-1");
    429   ck_assert(satisfiesO(&ver, ">=1.2.7+"));
    430   parseO(&ver, "ver-1.2.7-alpha.1");
    431   ck_assert(!satisfiesO(&ver, ">=1.2.7+"));
    432 
    433   // the range >=1.2.7 <1.3.0 would match the versions 1.2.7, 1.2.8, and 1.2.99, but not the versions 1.2.6, 1.3.0, or 1.1.0
    434   parseO(&ver, "ver-1.2.7");
    435   ck_assert(satisfiesO(&ver, ">=1.2.7 <1.3.0"));
    436   parseO(&ver, "ver-1.2.8");
    437   ck_assert(satisfiesO(&ver, ">=1.2.7 <1.3.0"));
    438   parseO(&ver, "ver-1.2.99");
    439   ck_assert(satisfiesO(&ver, ">=1.2.7 <1.3.0"));
    440   parseO(&ver, "ver-1.2.6");
    441   ck_assert(!satisfiesO(&ver, ">=1.2.7 <1.3.0"));
    442   parseO(&ver, "ver-1.3.0");
    443   ck_assert(!satisfiesO(&ver, ">=1.2.7 <1.3.0"));
    444 
    445   // the range 1.2.7 || >=1.2.9 <2.0.0 would match the versions 1.2.7, 1.2.9, and 1.4.6, but not the versions 1.2.8 or 2.0.0
    446   parseO(&ver, "ver-1.2.7");
    447   ck_assert(satisfiesO(&ver, "1.2.7 || >=1.2.9 <2.0.0"));
    448   parseO(&ver, "ver-1.2.9");
    449   ck_assert(satisfiesO(&ver, "1.2.7 || >=1.2.9 <2.0.0"));
    450   parseO(&ver, "ver-1.4.6");
    451   ck_assert(satisfiesO(&ver, "1.2.7 || >=1.2.9 <2.0.0"));
    452   parseO(&ver, "ver-1.2.8");
    453   ck_assert(!satisfiesO(&ver, "1.2.7 || >=1.2.9 <2.0.0"));
    454   parseO(&ver, "ver-2.0.0");
    455   ck_assert(!satisfiesO(&ver, "1.2.7 || >=1.2.9 <2.0.0"));
    456 
    457   // * := >= 0.0.0 (Any version)
    458   parseO(&ver, "ver-1.2.7");
    459   ck_assert(satisfiesO(&ver, "*"));
    460   ck_assert(satisfiesO(&ver, "x"));
    461   ck_assert(satisfiesO(&ver, "X"));
    462 
    463   // x.1.2 := =0.1.2 || =1.1.2 || 2.1.2... (Any release version with specified major.minor)
    464   ck_assert(satisfiesO(&ver, "X.2.7"));
    465   parseO(&ver, "ver-2.2.7");
    466   ck_assert(satisfiesO(&ver, "X.2.7"));
    467 
    468   // 1.0.0.x.2 := 1.0.0.0.2 || 1.0.0.1.2 || 1.0.0.2.2... (Any patch version with Release.Major.minor equal to 1.0.0 and with other version equal to 2)
    469   parseO(&ver, "ver-1.0.0.3.2");
    470   ck_assert(satisfiesO(&ver, "1.0.0.x.2"));
    471 
    472   // 1.2.3 - 2.3.4 := >=1.2.3 <=2.3.4
    473   parseO(&ver, "ver-1.2.3");
    474   ck_assert(satisfiesO(&ver, "1.2.3 - 2.3.4"));
    475   parseO(&ver, "ver-2.3.4");
    476   ck_assert(satisfiesO(&ver, "1.2.3 - 2.3.4"));
    477   parseO(&ver, "ver-1.2.2");
    478   ck_assert(!satisfiesO(&ver, "1.2.3 - 2.3.4"));
    479   parseO(&ver, "ver-2.3.5");
    480   ck_assert(!satisfiesO(&ver, "1.2.3 - 2.3.4"));
    481 
    482   // 1.2 - 2.3.4 := >=1.2.0 <=2.3.4
    483   parseO(&ver, "ver-1.2.3");
    484   ck_assert(satisfiesO(&ver, "1.2.3 - 2.3.4"));
    485   parseO(&ver, "ver-2.3.4");
    486   ck_assert(satisfiesO(&ver, "1.2.3 - 2.3.4"));
    487   parseO(&ver, "ver-1.1.3");
    488   ck_assert(!satisfiesO(&ver, "1.2.3 - 2.3.4"));
    489   parseO(&ver, "ver-2.3.5");
    490   ck_assert(!satisfiesO(&ver, "1.2.3 - 2.3.4"));
    491 
    492   // 1.2.3 - 2.3 := >=1.2.3 <2.4.0
    493   parseO(&ver, "ver-1.2.3");
    494   ck_assert(satisfiesO(&ver, "1.2.3 - 2.3"));
    495   parseO(&ver, "ver-2.3.30");
    496   ck_assert(satisfiesO(&ver, "1.2.3 - 2.3"));
    497   parseO(&ver, "ver-2.4");
    498   ck_assert(!satisfiesO(&ver, "1.2.3 - 2.3"));
    499   parseO(&ver, "ver-1.2.2");
    500   ck_assert(!satisfiesO(&ver, "1.2.3 - 2.3"));
    501 
    502   // 1.2.3 - 2 := >=1.2.3 <3.0.0
    503   parseO(&ver, "ver-1.2.3");
    504   ck_assert(satisfiesO(&ver, "1.2.3 - 2"));
    505   parseO(&ver, "ver-2.3.30");
    506   ck_assert(satisfiesO(&ver, "1.2.3 - 2"));
    507   parseO(&ver, "ver-2.4");
    508   ck_assert(satisfiesO(&ver, "1.2.3 - 2"));
    509   parseO(&ver, "ver-3.0.0");
    510   ck_assert(!satisfiesO(&ver, "1.2.3 - 2"));
    511   parseO(&ver, "ver-1.2.2");
    512   ck_assert(!satisfiesO(&ver, "1.2.3 - 2"));
    513 
    514   // 1.x := >=1.0.0- <2.0.0 (Matching major version)
    515   parseO(&ver, "ver-1.2.3");
    516   ck_assert(satisfiesO(&ver, "1.x"));
    517   parseO(&ver, "ver-1.0.0-pre");
    518   ck_assert(!satisfiesO(&ver, "1.x"));
    519   parseO(&ver, "ver-2.0");
    520   ck_assert(!satisfiesO(&ver, "1.x"));
    521 
    522   // 1.2.x := >=1.2.0- <1.3.0 (Matching major and minor versions)
    523   parseO(&ver, "ver-1.2.3");
    524   ck_assert(satisfiesO(&ver, "1.2.x"));
    525   parseO(&ver, "ver-1.2.3-pre");
    526   ck_assert(!satisfiesO(&ver, "1.2.x"));
    527   parseO(&ver, "ver-1.3.0.1");
    528   ck_assert(!satisfiesO(&ver, "1.2.x"));
    529 
    530   // 1.*- := >=1.0.0 <2.0.0 (Matching major version and prereleases)
    531   parseO(&ver, "ver-1.0");
    532   ck_assert(satisfiesO(&ver, "1.*-"));
    533   parseO(&ver, "ver-1.0-pre");
    534   ck_assert(satisfiesO(&ver, "1.*-"));
    535   parseO(&ver, "ver-2.0-pre");
    536   ck_assert(!satisfiesO(&ver, "1.*-"));
    537 
    538   // 1.X+ := >=1.0.0+ <2.0.0 (Matching major version and build version)
    539   parseO(&ver, "ver-1.0+build1");
    540   ck_assert(satisfiesO(&ver, "1.X+"));
    541   parseO(&ver, "ver-1.6");
    542   ck_assert(satisfiesO(&ver, "1.X+"));
    543   parseO(&ver, "ver-1.6-pre");
    544   ck_assert(!satisfiesO(&ver, "1.X+"));
    545   parseO(&ver, "ver-2.0-pre");
    546   ck_assert(!satisfiesO(&ver, "1.X+"));
    547 
    548   // "" (empty string) := * := >=0.0.0
    549   parseO(&ver, "ver-1.2.7");
    550   ck_assert(satisfiesO(&ver, ""));
    551 
    552   // ~1.1.2.3 := >=1.1.2.3- <1.1.3.0
    553   parseO(&ver, "ver-1.1.2.3");
    554   ck_assert(satisfiesO(&ver, "~1.1.2.3"));
    555   parseO(&ver, "ver-1.1.2.3-pre");
    556   ck_assert(!satisfiesO(&ver, "~1.1.2.3"));
    557   parseO(&ver, "ver-1.1.3");
    558   ck_assert(!satisfiesO(&ver, "~1.1.2.3"));
    559 
    560   // ~1.1.2.3- := >=1.1.2.3 <1.1.3.0 (same as the line above, adds 1.1.2.3 prereleases)
    561   parseO(&ver, "ver-1.1.2.3");
    562   ck_assert(satisfiesO(&ver, "~1.1.2.3-"));
    563   parseO(&ver, "ver-1.1.2.3-pre");
    564   ck_assert(satisfiesO(&ver, "~1.1.2.3-"));
    565   parseO(&ver, "ver-1.1.3");
    566   ck_assert(!satisfiesO(&ver, "~1.1.2.3-"));
    567 
    568   // ~1.1.2 := >=1.1.2.0- <1.1.3.0 (Same as 1.1.2.x)
    569   parseO(&ver, "ver-1.1.2.0");
    570   ck_assert(satisfiesO(&ver, "~1.1.2"));
    571   parseO(&ver, "ver-1.1.2.0-pre");
    572   ck_assert(!satisfiesO(&ver, "~1.1.2"));
    573   parseO(&ver, "ver-1.1.3");
    574   ck_assert(!satisfiesO(&ver, "~1.1.2"));
    575 
    576   // ~1.1 := >=1.1.0.0- <1.2.0.0 (Same as 1.1.x)
    577   parseO(&ver, "ver-1.1");
    578   ck_assert(satisfiesO(&ver, "~1.1"));
    579   parseO(&ver, "ver-1.2");
    580   ck_assert(!satisfiesO(&ver, "~1.1"));
    581 
    582   // ~1 := >=1.0.0- <2.0.0 (Same as 1.x)
    583   parseO(&ver, "ver-1");
    584   ck_assert(satisfiesO(&ver, "~1"));
    585   parseO(&ver, "ver-2.0");
    586   ck_assert(!satisfiesO(&ver, "~1"));
    587 
    588   // ~0.2.3 >=0.2.3- <0.3.0
    589   parseO(&ver, "ver-0.2.3");
    590   ck_assert(satisfiesO(&ver, "~0.2.3"));
    591   parseO(&ver, "ver-0.3");
    592   ck_assert(!satisfiesO(&ver, "~0.2.3"));
    593 
    594   // ~0.2 := >=0.2.0- <0.3.0 (Same as 0.2.x)
    595   parseO(&ver, "ver-0.2");
    596   ck_assert(satisfiesO(&ver, "~0.2"));
    597   parseO(&ver, "ver-0.3");
    598   ck_assert(!satisfiesO(&ver, "~0.2"));
    599 
    600   // ~0 := >=0.0.0- <1.0.0 (same as 0.x)
    601   parseO(&ver, "ver-0.0.1");
    602   ck_assert(satisfiesO(&ver, "~0"));
    603   parseO(&ver, "ver-1.0");
    604   ck_assert(!satisfiesO(&ver, "~0"));
    605 
    606   // ~0- := >=0.0.0 <1.0.0 (same as 0.x-, same as the line above, adds 0.0.0 prereleases)
    607   parseO(&ver, "ver-0.0-pre");
    608   ck_assert(satisfiesO(&ver, "~0-"));
    609   parseO(&ver, "ver-1.0");
    610   ck_assert(!satisfiesO(&ver, "~0-"));
    611 
    612   // ~1.2.3-beta.2 := >=1.2.3-beta.2 <1.3.0 Note that prereleases in the 1.2.3 version will be allowed, if they are greater than or equal to beta.2. So, 1.2.3-beta.4 would be allowed, but 1.2.4-beta.2 would not, because it is a prerelease of a different [major, minor, patch] tuple.
    613   parseO(&ver, "ver-1.2.3-beta.2");
    614   ck_assert(satisfiesO(&ver, "~1.2.3-beta.2"));
    615   parseO(&ver, "ver-1.2.3-beta.3");
    616   ck_assert(satisfiesO(&ver, "~1.2.3-beta.2"));
    617   parseO(&ver, "ver-1.2.3");
    618   ck_assert(satisfiesO(&ver, "~1.2.3-beta.2"));
    619   parseO(&ver, "ver-1.2.3-beta.1");
    620   ck_assert(!satisfiesO(&ver, "~1.2.3-beta.2"));
    621   parseO(&ver, "ver-1.3");
    622   ck_assert(!satisfiesO(&ver, "~1.2.3-beta.2"));
    623 
    624   // ^1.1.2.3 := >=1.1.2.3- <1.2.0.0
    625   parseO(&ver, "ver-1.1.2.3");
    626   ck_assert(satisfiesO(&ver, "^1.1.2.3"));
    627   parseO(&ver, "ver-1.2.0");
    628   ck_assert(!satisfiesO(&ver, "^1.1.2.3"));
    629 
    630   // ^0.0.2.3 := >=0.0.2.3- <0.1.0.0
    631   parseO(&ver, "ver-0.0.2.3");
    632   ck_assert(satisfiesO(&ver, "^0.0.2.3"));
    633   parseO(&ver, "ver-0.1");
    634   ck_assert(!satisfiesO(&ver, "^0.0.2.3"));
    635 
    636   // ^0.0.0.3 := >=0.0.0.3- <0.1.0.0
    637   parseO(&ver, "ver-0.0.2.3");
    638   ck_assert(satisfiesO(&ver, "^0.0.0.3"));
    639   parseO(&ver, "ver-0.1");
    640   ck_assert(!satisfiesO(&ver, "^0.0.0.3"));
    641 
    642   // ^1.2.3-beta.2 := >=1.2.3-beta.2 <1.3.0 Note that prereleases in the 1.2.3 version will be allowed, if they are greater than or equal to beta.2. So, 1.2.3-beta.4 would be allowed, but 1.2.4-beta.2 would not, because it is a prerelease of a different [major, minor, patch] tuple.
    643   parseO(&ver, "ver-1.2.3-beta.2");
    644   ck_assert(satisfiesO(&ver, "^1.2.3-beta.2"));
    645   parseO(&ver, "ver-1.2.3-beta.3");
    646   ck_assert(satisfiesO(&ver, "^1.2.3-beta.2"));
    647   parseO(&ver, "ver-1.2.3-beta.1");
    648   ck_assert(!satisfiesO(&ver, "^1.2.3-beta.2"));
    649   parseO(&ver, "ver-1.3");
    650   ck_assert(!satisfiesO(&ver, "^1.2.3-beta.2"));
    651 
    652   // ^0.0.3-beta := >=0.0.3-beta <0.1.0 Note that prereleases in the 0.0.3 version only will be allowed, if they are greater than or equal to beta. So, 0.0.3-pr.2 would be allowed.
    653   parseO(&ver, "ver-0.0.3-beta");
    654   ck_assert(satisfiesO(&ver, "^0.0.3-beta"));
    655   parseO(&ver, "ver-0.1");
    656   ck_assert(!satisfiesO(&ver, "^0.0.3-beta"));
    657 
    658   // ^1.1.2.x := >=1.1.2.0- <1.2.0.0
    659   parseO(&ver, "ver-1.1.2");
    660   ck_assert(satisfiesO(&ver, "^1.1.2.x"));
    661   parseO(&ver, "ver-1.2");
    662   ck_assert(!satisfiesO(&ver, "^1.1.2.x"));
    663 
    664   // ^0.0.0.x := >=0.0.0- <0.1.0
    665   parseO(&ver, "ver-0");
    666   ck_assert(satisfiesO(&ver, "^0.0.0.x"));
    667   parseO(&ver, "ver-0-pre");
    668   ck_assert(!satisfiesO(&ver, "^0.0.0.x"));
    669   parseO(&ver, "ver-0.1");
    670   ck_assert(!satisfiesO(&ver, "^0.0.0.x"));
    671 
    672   // ^0.0 := >=0.0.0- <0.1.0
    673   parseO(&ver, "ver-0");
    674   ck_assert(satisfiesO(&ver, "^0.0"));
    675   parseO(&ver, "ver-0-pre");
    676   ck_assert(!satisfiesO(&ver, "^0.0"));
    677   parseO(&ver, "ver-0.1");
    678   ck_assert(!satisfiesO(&ver, "^0.0"));
    679 
    680   // ^1.1.x := >=1.1.0- <1.2.0
    681   parseO(&ver, "ver-1.1.0");
    682   ck_assert(satisfiesO(&ver, "^1.1.x"));
    683   parseO(&ver, "ver-1.2");
    684   ck_assert(!satisfiesO(&ver, "^1.1.x"));
    685 
    686   // ^0.0.x := >=0.0.0- <0.1.0
    687   parseO(&ver, "ver-0");
    688   ck_assert(satisfiesO(&ver, "^0.0.x"));
    689   parseO(&ver, "ver-0-pre");
    690   ck_assert(!satisfiesO(&ver, "^0.0.x"));
    691   parseO(&ver, "ver-0.1");
    692   ck_assert(!satisfiesO(&ver, "^0.0.x"));
    693 
    694   freeO(&ver);
    695 
    696 END_TEST
    697 
    698 START_TEST(toJsonT)
    699 
    700   createVersion(ver);
    701 
    702   parseO(&ver, "1.0.0-pre+b012");
    703 
    704   smallJsont ref;
    705   initiateG(&ref);
    706   parseG(&ref, "{\"release\":1,\"major\":0,\"minor\":0,\"patch\":0,\"others\":[],\"prerelease\":[\"pre\"],\"build\":[\"b012\"]}");
    707 
    708   var j = toJsonO(&ver);
    709   ck_assert(eqG(j, &ref));
    710 
    711   terminateG(j);
    712 
    713   freeManyG(&ver, &ref);
    714 
    715 END_TEST
    716 
    717 START_TEST(toJsonStrT)
    718 
    719   createVersion(ver);
    720 
    721   parseO(&ver, "1.0.0-pre+b012");
    722 
    723   char *js = toJsonStrO(&ver);
    724   ck_assert_str_eq(js, "{\"release\":1,\"major\":0,\"minor\":0,\"patch\":0,\"others\":[],\"prerelease\":[\"pre\"],\"build\":[\"b012\"]}");
    725 
    726   free(js);
    727   freeO(&ver);
    728 
    729 END_TEST
    730 
    731 START_TEST(fromJsonT)
    732 
    733   createVersion(ver);
    734 
    735   smallJsont ref;
    736   initiateG(&ref);
    737   parseG(&ref, "{\"release\":1,\"major\":0,\"minor\":0,\"patch\":0,\"others\":[],\"prerelease\":[\"pre\"],\"build\":[\"b012\"]}");
    738 
    739   fromJsonO(&ver, &ref);
    740 
    741   var j = toJsonO(&ver);
    742   ck_assert(eqG(j, &ref));
    743 
    744   terminateG(j);
    745 
    746   freeManyG(&ver, &ref);
    747 
    748 END_TEST
    749 
    750 START_TEST(fromJsonStrT)
    751 
    752   createVersion(ver);
    753 
    754   fromJsonStrO(&ver, "{\"release\":1,\"major\":0,\"minor\":0,\"patch\":0,\"others\":[],\"prerelease\":[\"pre\"],\"build\":[\"b012\"]}");
    755 
    756   char *js = toJsonStrO(&ver);
    757   ck_assert_str_eq(js, "{\"release\":1,\"major\":0,\"minor\":0,\"patch\":0,\"others\":[],\"prerelease\":[\"pre\"],\"build\":[\"b012\"]}");
    758 
    759   free(js);
    760   freeO(&ver);
    761 
    762 END_TEST
    763 
    764 Suite * versionSuite(void) {
    765   Suite *s;
    766   TCase *tc_core;
    767 
    768   s = suite_create("version");
    769 
    770   /* Core test case */
    771   tc_core = tcase_create("Core");
    772 
    773 
    774   tcase_add_test(tc_core, basetT);
    775   tcase_add_test(tc_core, validT);
    776   tcase_add_test(tc_core, parseT);
    777   tcase_add_test(tc_core, parseStrictT);
    778   tcase_add_test(tc_core, cleanT);
    779   tcase_add_test(tc_core, equalT);
    780   tcase_add_test(tc_core, equalST);
    781   tcase_add_test(tc_core, equalSST);
    782   tcase_add_test(tc_core, cmpT);
    783   tcase_add_test(tc_core, cmpST);
    784   tcase_add_test(tc_core, cmpSST);
    785   tcase_add_test(tc_core, incrT);
    786   tcase_add_test(tc_core, sortT);
    787   tcase_add_test(tc_core, satisfiesT);
    788   tcase_add_test(tc_core, toJsonT);
    789   tcase_add_test(tc_core, toJsonStrT);
    790   tcase_add_test(tc_core, fromJsonT);
    791   tcase_add_test(tc_core, fromJsonStrT);
    792 
    793   suite_add_tcase(s, tc_core);
    794 
    795   ret s;
    796 }
    797 
    798 int main(int ARGC, char** ARGV) {
    799 
    800   argc = ARGC; argv = ARGV;
    801 
    802   //dont initialize libsheepy, it conflicts with libcheck - initLibsheepy(ARGV[0]);
    803   setLogMode(LOG_FUNC);
    804 
    805   int number_failed;
    806   Suite *s;
    807   SRunner *sr;
    808 
    809   s = versionSuite();
    810   sr = srunner_create(s);
    811 
    812   srunner_run_all(sr, CK_NORMAL);
    813   number_failed = srunner_ntests_failed(sr);
    814   srunner_free(sr);
    815 
    816   exit((number_failed == 0) ? EXIT_SUCCESS : EXIT_FAILURE);
    817 }
    818 // vim: set expandtab ts=2 sw=2: