@@ -11,61 +11,69 @@ class TastyVersionFormatTest {
11
11
import TastyVersionFormatTest ._
12
12
13
13
/** aliases `TastyVersion.apply` */
14
- def compiler (major : Int , minor : Int , experimental : Int ) = TastyVersion (major, minor, experimental)
14
+ def compiler (major : Int , minor : Int , experimental : Experimental ) = TastyVersion (major, minor, experimental)
15
15
16
16
/** aliases `TastyVersion.apply` */
17
- def file (major : Int , minor : Int , experimental : Int ) = TastyVersion (major, minor, experimental)
17
+ def file (major : Int , minor : Int , experimental : Experimental ) = TastyVersion (major, minor, experimental)
18
18
19
19
@ Test def accept_ExperimentalReadEQExperimental_EQMinor : Unit = {
20
- assert(file(28 ,1 ,1 ) <:< compiler(28 ,1 ,1 )) // same minor, same experimental
20
+ assert(file(28 ,1 ,Exp ( 1 )) <:< compiler(28 ,1 ,Exp ( 1 ) )) // same minor, same experimental
21
21
}
22
22
23
23
@ Test def accept_ExperimentalReadFinal_LTMinor : Unit = {
24
- assert(file(28 ,0 ,0 ) <:< compiler(28 ,1 ,1 )) // preceding minor
24
+ assert(file(28 ,0 ,Final ) <:< compiler(28 ,1 ,Exp ( 1 ) )) // preceding minor
25
25
}
26
26
27
27
@ Test def accept_FinalReadFinal_LTEqualMinor : Unit = {
28
- assert(file(28 ,0 ,0 ) <:< compiler(28 ,1 ,0 )) // preceding minor
29
- assert(file(28 ,0 ,0 ) <:< compiler(28 ,0 ,0 )) // same minor
28
+ assert(file(28 ,0 ,Final ) <:< compiler(28 ,1 ,Final )) // preceding minor
29
+ assert(file(28 ,0 ,Final ) <:< compiler(28 ,0 ,Final )) // same minor
30
30
}
31
31
32
32
/** these cases are unrelated because a final compiler can only read final tasty of <= minor version */
33
33
@ Test def reject_FinalReadFinal_GTMinor : Unit = {
34
- assert(file(28 ,2 ,0 ) unrelatedTo compiler(28 ,1 ,0 )) // succeeding minor
34
+ assert(file(28 ,2 ,Final ) unrelatedTo compiler(28 ,1 ,Final )) // succeeding minor
35
35
}
36
36
37
37
/** these cases are unrelated because a final compiler can not read experimental tasty */
38
38
@ Test def reject_FinalReadExperimental : Unit = {
39
- assert(file(28 ,0 ,1 ) unrelatedTo compiler(28 ,1 ,0 )) // preceding minor
40
- assert(file(28 ,1 ,1 ) unrelatedTo compiler(28 ,1 ,0 )) // same minor
41
- assert(file(28 ,2 ,1 ) unrelatedTo compiler(28 ,1 ,0 )) // succeeding minor
39
+ assert(file(28 ,0 ,Exp ( 1 )) unrelatedTo compiler(28 ,1 ,Final )) // preceding minor
40
+ assert(file(28 ,1 ,Exp ( 1 )) unrelatedTo compiler(28 ,1 ,Final )) // same minor
41
+ assert(file(28 ,2 ,Exp ( 1 )) unrelatedTo compiler(28 ,1 ,Final )) // succeeding minor
42
42
}
43
43
44
44
/** These cases are unrelated because an experimental compiler can only read final tasty of < minor version */
45
45
@ Test def reject_ExperimentalReadFinal_GTEqualMinor : Unit = {
46
- assert(file(28 ,2 ,0 ) unrelatedTo compiler(28 ,1 ,1 )) // succeeding minor
47
- assert(file(28 ,1 ,0 ) unrelatedTo compiler(28 ,1 ,1 )) // equal minor
46
+ assert(file(28 ,2 ,Final ) unrelatedTo compiler(28 ,1 ,Exp ( 1 ) )) // succeeding minor
47
+ assert(file(28 ,1 ,Final ) unrelatedTo compiler(28 ,1 ,Exp ( 1 ) )) // equal minor
48
48
}
49
49
50
50
/** These cases are unrelated because both compiler and file are experimental,
51
51
* and with unequal experimental part.
52
52
*/
53
53
@ Test def reject_ExperimentalReadNEExperimental : Unit = {
54
- assert(file(28 ,1 ,2 ) unrelatedTo compiler(28 ,1 ,1 )) // same minor version, succeeding experimental
55
- assert(file(28 ,1 ,1 ) unrelatedTo compiler(28 ,1 ,2 )) // same minor version, preceding experimental
54
+ assert(file(28 ,1 ,Exp ( 2 )) unrelatedTo compiler(28 ,1 ,Exp ( 1 ) )) // same minor version, succeeding experimental
55
+ assert(file(28 ,1 ,Exp ( 1 )) unrelatedTo compiler(28 ,1 ,Exp ( 2 ) )) // same minor version, preceding experimental
56
56
}
57
57
58
58
/** these cases are unrelated because the major version must be identical */
59
59
@ Test def reject_NEMajor : Unit = {
60
- assert(file(27 ,0 ,0 ) unrelatedTo compiler(28 ,0 ,0 )) // less than
61
- assert(file(29 ,0 ,0 ) unrelatedTo compiler(28 ,0 ,0 )) // greater than
60
+ assert(file(27 ,0 ,Final ) unrelatedTo compiler(28 ,0 ,Final )) // less than
61
+ assert(file(29 ,0 ,Final ) unrelatedTo compiler(28 ,0 ,Final )) // greater than
62
62
}
63
63
64
64
}
65
65
66
66
object TastyVersionFormatTest {
67
67
68
- case class TastyVersion (major : Int , minor : Int , experimental : Int ) { file =>
68
+ type Experimental = Int
69
+ val Final : Experimental = 0
70
+ def Exp (i : Int ): Experimental = i.ensuring(_ > 0 )
71
+
72
+ case class TastyVersion (major : Int , minor : Int , experimental : Experimental ) { file =>
73
+ assert(major >= 0 )
74
+ assert(minor >= 0 )
75
+ assert(experimental >= 0 )
76
+
69
77
def <:< (compiler : TastyVersion ): Boolean = TastyFormat .isVersionCompatible(
70
78
fileMajor = file.major,
71
79
fileMinor = file.minor,
0 commit comments