@@ -67,6 +67,57 @@ int main(int argc, char** argv)
6767 assert (trim (testPrgmStr1.getReadableContent ({{" prettify" , true }, {" reindent" , true }})) == " \" 42→Str1\n Str2\n 123" );
6868 }
6969
70+ {
71+ // See https://wikiti.brandonw.net/index.php?title=83Plus:OS:Variable_Versions
72+ TIVarFile testPrgmStr1 = TIVarFile::createNew (" Program" , " asdf" );
73+ const auto & ver = testPrgmStr1.getVarEntries ()[0 ].version ;
74+ assert (ver == 0x00 );
75+ testPrgmStr1.setContentFromString (" Disp 41+1" );
76+ assert ((ver & ~0x20 ) == 0x00 );
77+ testPrgmStr1.setContentFromString (" Archive A" );
78+ assert ((ver & ~0x20 ) == 0x01 );
79+ testPrgmStr1.setContentFromString (" GarbageCollect" );
80+ assert ((ver & ~0x20 ) == 0x01 );
81+ testPrgmStr1.setContentFromString (" Disp 42%" );
82+ assert ((ver & ~0x20 ) == 0x02 );
83+ testPrgmStr1.setContentFromString (" ~A" );
84+ assert ((ver & ~0x20 ) == 0x02 );
85+ testPrgmStr1.setContentFromString (" Disp \" …\" " );
86+ assert ((ver & ~0x20 ) == 0x03 );
87+ testPrgmStr1.setContentFromString (" Disp \" ⌸\" " );
88+ assert ((ver & ~0x20 ) == 0x03 );
89+ testPrgmStr1.setContentFromString (" setDate(A,B,C)" );
90+ assert ((ver & ~0x20 ) == 0x04 );
91+ testPrgmStr1.setContentFromString (" ExecLib \" A\" " );
92+ assert ((ver & ~0x20 ) == 0x04 );
93+ testPrgmStr1.setContentFromString (" Manual-Fit " );
94+ assert ((ver & ~0x20 ) == 0x05 );
95+ testPrgmStr1.setContentFromString (" ZQuadrant1" );
96+ assert ((ver & ~0x20 ) == 0x06 );
97+ testPrgmStr1.setContentFromString (" FRAC" );
98+ assert ((ver & ~0x20 ) == 0x06 );
99+ testPrgmStr1.setContentFromString (" STATWIZARD ON" );
100+ assert ((ver & ~0x20 ) == 0x07 );
101+ testPrgmStr1.setContentFromString (" STATWIZARD OFF" );
102+ assert ((ver & ~0x20 ) == 0x07 );
103+ testPrgmStr1.setContentFromString (" BLUE" );
104+ assert ((ver & ~0x20 ) == 0x0A );
105+ testPrgmStr1.setContentFromString (" Dot-Thin" );
106+ assert ((ver & ~0x20 ) == 0x0A );
107+ testPrgmStr1.setContentFromString (" TraceStep" );
108+ assert ((ver & ~0x20 ) == 0x00 ); // 63** token ranges are not considered by a calculator when it generates the version.
109+ testPrgmStr1.setContentFromString (" Asm84CEPrgm:C9" );
110+ assert ((ver & ~0x20 ) == 0x0B );
111+ testPrgmStr1.setContentFromString (" Disp eval(Str1" );
112+ assert ((ver & ~0x20 ) == 0x0B ); // 0Bh is used for all of TI-84 Plus CE OS 5.0 through 5.2, despite tokens being added between them.
113+ testPrgmStr1.setContentFromString (" Quartiles Setting…" );
114+ assert ((ver & ~0x20 ) == 0x0B );
115+ testPrgmStr1.setContentFromString (" Execute Program" );
116+ assert ((ver & ~0x20 ) == 0x0C );
117+ testPrgmStr1.setContentFromString (" piecewise(" );
118+ assert ((ver & ~0x20 ) == 0x0C );
119+ }
120+
70121 {
71122 assert (TH_Tokenized::oneTokenBytesToString (0x00 ) == " " );
72123 assert (TH_Tokenized::oneTokenBytesToString (0xBB ) == " " );
0 commit comments