@@ -99,8 +99,45 @@ public void ControlWordDoesNotConsumeFollowingStar() {
9999 [ Theory ]
100100 [ InlineData ( @"\not=" , "≠" , @"\neq " ) ]
101101 [ InlineData ( @"\not<" , "≮" , @"\nless " ) ]
102+ [ InlineData ( @"\not>" , "≯" , @"\ngtr " ) ]
102103 [ InlineData ( @"\not\leq" , "≰" , @"\nleq " ) ]
104+ [ InlineData ( @"\not\le" , "≰" , @"\nleq " ) ]
105+ [ InlineData ( @"\not\leqslant" , "⩽\u0338 " , @"\nleqslant " ) ]
106+ [ InlineData ( @"\not\leqq" , "≦\u0338 " , @"\nleqq " ) ]
103107 [ InlineData ( @"\not\in" , "∉" , @"\notin " ) ]
108+ [ InlineData ( @"\not\geq" , "≱" , @"\ngeq " ) ]
109+ [ InlineData ( @"\not\ge" , "≱" , @"\ngeq " ) ]
110+ [ InlineData ( @"\not\geqslant" , "⩾\u0338 " , @"\ngeqslant " ) ]
111+ [ InlineData ( @"\not\geqq" , "≧\u0338 " , @"\ngeqq " ) ]
112+ [ InlineData ( @"\not\prec" , "⊀" , @"\nprec " ) ]
113+ [ InlineData ( @"\not\preceq" , "⪯\u0338 " , @"\npreceq " ) ]
114+ [ InlineData ( @"\not\preccurlyeq" , "⋠" , @"\npreccurlyeq " ) ]
115+ [ InlineData ( @"\not\sim" , "≁" , @"\nsim " ) ]
116+ [ InlineData ( @"\not\mid" , "∤" , @"\nshortmid " ) ]
117+ [ InlineData ( @"\not\shortmid" , "∤" , @"\nshortmid " ) ]
118+ [ InlineData ( @"\not\vdash" , "⊬" , @"\nvdash " ) ]
119+ [ InlineData ( @"\not\vDash" , "⊭" , @"\nvDash " ) ]
120+ [ InlineData ( @"\not\Vdash" , "⊮" , @"\nVdash " ) ]
121+ [ InlineData ( @"\not\subseteq" , "⊈" , @"\nsubseteq " ) ]
122+ [ InlineData ( @"\not\supseteq" , "⊉" , @"\nsupseteq " ) ]
123+ [ InlineData ( @"\not\succ" , "⊁" , @"\nsucc " ) ]
124+ [ InlineData ( @"\not\succeq" , "⪰\u0338 " , @"\nsucceq " ) ]
125+ [ InlineData ( @"\not\succcurlyeq" , "⋡" , @"\nsucccurlyeq " ) ]
126+ [ InlineData ( @"\not\parallel" , "∦" , @"\nshortparallel " ) ]
127+ [ InlineData ( @"\not\shortparallel" , "∦" , @"\nshortparallel " ) ]
128+ [ InlineData ( @"\not\vartriangleleft" , "⋪" , @"\ntriangleleft " ) ]
129+ [ InlineData ( @"\not\trianglelefteq" , "⋬" , @"\ntrianglelefteq " ) ]
130+ [ InlineData ( @"\not\vartriangleright" , "⋫" , @"\ntriangleright " ) ]
131+ [ InlineData ( @"\not\trianglerighteq" , "⋭" , @"\ntrianglerighteq " ) ]
132+ [ InlineData ( @"\not\cong" , "≇" , @"\ncong " ) ]
133+ [ InlineData ( @"\not\gets" , "↚" , @"\nleftarrow " ) ]
134+ [ InlineData ( @"\not\leftarrow" , "↚" , @"\nleftarrow " ) ]
135+ [ InlineData ( @"\not\Leftarrow" , "⇍" , @"\nLeftarrow " ) ]
136+ [ InlineData ( @"\not\rightarrow" , "↛" , @"\nrightarrow " ) ]
137+ [ InlineData ( @"\not\to" , "↛" , @"\nrightarrow " ) ]
138+ [ InlineData ( @"\not\Rightarrow" , "⇏" , @"\nRightarrow " ) ]
139+ [ InlineData ( @"\not\leftrightarrow" , "↮" , @"\nleftrightarrow " ) ]
140+ [ InlineData ( @"\not\Leftrightarrow" , "⇎" , @"\nLeftrightarrow " ) ]
104141 public void NotNegatesRelation ( string input , string nucleus , string output ) {
105142 var list = ParseLaTeX ( input ) ;
106143
@@ -119,26 +156,40 @@ public void NotRejectsNonRelation(string input) {
119156 Assert . Contains ( @"\not must be followed by a relation" , error ) ;
120157 }
121158
122- [ Fact ]
123- public void NotUsesCombiningOverlayForUnsupportedRelation ( ) {
124- var list = ParseLaTeX ( @"\not\approx" ) ;
159+ [ Theory ]
160+ [ InlineData ( @"\not\approx" , "≉" , @"\not \approx " ) ]
161+ [ InlineData ( @"\not\equiv" , "≢" , @"\not \equiv " ) ]
162+ [ InlineData ( @"\not\subset" , "⊄" , @"\not \subset " ) ]
163+ [ InlineData ( @"\not\ni" , "∌" , @"\not \ni " ) ]
164+ public void NotUsesUnicodePrecomposedNegationWhenAvailable ( string input , string nucleus , string output ) {
165+ var list = ParseLaTeX ( input ) ;
166+
167+ var relation = Assert . IsType < Relation > ( Assert . Single ( list ) ) ;
168+ Assert . Equal ( nucleus , relation . Nucleus ) ;
169+ var serialized = LaTeXParser . MathListToLaTeX ( list ) . ToString ( ) ;
170+ Assert . Equal ( output , serialized ) ;
171+ Assert . Equal ( list , ParseLaTeX ( serialized ) ) ;
172+ }
125173
174+ [ Fact ]
175+ public void NotUsesCombiningOverlayWhenNoPrecomposedNegationExists ( ) {
176+ var list = ParseLaTeX ( @"\not\propto" ) ;
126177 var relation = Assert . IsType < Relation > ( Assert . Single ( list ) ) ;
127- Assert . Equal ( "≈ \u0338 " , relation . Nucleus ) ;
178+ Assert . Equal ( "∝ \u0338 " , relation . Nucleus ) ;
128179 var serialized = LaTeXParser . MathListToLaTeX ( list ) . ToString ( ) ;
129- Assert . Equal ( @"\not \approx " , serialized ) ;
180+ Assert . Equal ( @"\not \propto " , serialized ) ;
130181 Assert . Equal ( list , ParseLaTeX ( serialized ) ) ;
131182 }
132183
133184 [ Fact ]
134185 public void NotSerializesScriptsOnOuterRelation ( ) {
135- var list = ParseLaTeX ( @"\not\approx ^2" ) ;
186+ var list = ParseLaTeX ( @"\not\propto ^2" ) ;
136187
137188 var relation = Assert . IsType < Relation > ( Assert . Single ( list ) ) ;
138- Assert . Equal ( "≈ \u0338 " , relation . Nucleus ) ;
189+ Assert . Equal ( "∝ \u0338 " , relation . Nucleus ) ;
139190 Assert . Equal ( "2" , Assert . Single ( relation . Superscript ) . Nucleus ) ;
140191 var serialized = LaTeXParser . MathListToLaTeX ( list ) . ToString ( ) ;
141- Assert . Equal ( @"\not \approx ^2" , serialized ) ;
192+ Assert . Equal ( @"\not \propto ^2" , serialized ) ;
142193 Assert . Equal ( list , ParseLaTeX ( serialized ) ) ;
143194 }
144195
0 commit comments