1+ module ArithmeticOperationsCompilersTest
2+
3+ open FsUnit
4+ open NUnit.Framework
5+ open Xtensive.Orm
6+ open Xtensive.Orm .Tests
7+ open Model
8+ open Microsoft.FSharp .Linq
9+
10+ [<TestFixture>]
11+ type Fixture () =
12+ inherit AutoBuildTest()
13+
14+ override this.BuildConfiguration () =
15+ let config = base .BuildConfiguration ()
16+ config.Types.Register typeof< X>
17+ config
18+
19+ [<Test>]
20+ member this.AdditionStringTest () =
21+ use session = base .Domain.OpenSession ()
22+ use ts = session.OpenTransaction ()
23+ X ( StringField = " John" ) |> ignore
24+ let alll = session.Query.All< X> ()
25+ let query =
26+ query {
27+ for x in alll do
28+ if ( x.StringField + x.StringField) = " JohnJohn" then
29+ yield x
30+ }
31+ let list = query |> Seq.toArray
32+ Assert.That( list.Length, Is.EqualTo( 1 ))
33+ let fetched = list.[ 0 ]
34+ Assert.That( fetched.StringField, Is.EqualTo( " John" ))
35+
36+ [<Test>]
37+ member this.AdditionDateTimeTest () =
38+ use session = base .Domain.OpenSession ()
39+ use ts = session.OpenTransaction ()
40+ X ( DateTimeField = new System.DateTime( System.DateTime.Now.Year, 2 , 15 )) |> ignore
41+ let alll = session.Query.All< X> ()
42+ let query =
43+ query {
44+ for x in alll do
45+ if ( x.DateTimeField + System.TimeSpan.FromDays( 2 )) > new System.DateTime( System.DateTime.Now.Year, 2 , 15 ) then
46+ yield x
47+ }
48+ let list = query |> Seq.toArray
49+ Assert.That( list.Length, Is.EqualTo( 1 ))
50+ let fetched = list.[ 0 ]
51+ Assert.That( fetched.DateTimeField, Is.EqualTo( new System.DateTime( System.DateTime.Now.Year, 2 , 15 )))
52+
53+ [<Test>]
54+ member this.AdditionTimeSpanTest () =
55+ Require.ProviderIsNot ( StorageProvider.PostgreSql)
56+ use session = base .Domain.OpenSession ()
57+ use ts = session.OpenTransaction ()
58+ X ( TimeSpanField = System.TimeSpan.FromTicks( 111222333 )) |> ignore
59+ let alll = session.Query.All< X> ()
60+ let query =
61+ query {
62+ for x in alll do
63+ if ( x.TimeSpanField + System.TimeSpan.FromDays( 2 )) > System.TimeSpan.FromTicks( 111222333 ) + System.TimeSpan.FromDays( 1 ) then
64+ yield x
65+ }
66+ let list = query |> Seq.toArray
67+ Assert.That( list.Length, Is.EqualTo( 1 ))
68+ let fetched = list.[ 0 ]
69+ Assert.That( fetched.TimeSpanField, Is.EqualTo( System.TimeSpan.FromTicks( 111222333 )))
70+
71+ [<Test>]
72+ member this.AdditionDecimalTest () =
73+ use session = base .Domain.OpenSession ()
74+ use ts = session.OpenTransaction ()
75+ X ( DecimalField = decimal 16.0 ) |> ignore
76+ let alll = session.Query.All< X> ()
77+ let query =
78+ query {
79+ for x in alll do
80+ if x.DecimalField + x.DecimalField <= decimal 35 then
81+ yield x
82+ }
83+ let list = query |> Seq.toArray
84+ Assert.That( list.Length, Is.EqualTo( 1 ))
85+ let fetched = list.[ 0 ]
86+ Assert.That( fetched.DecimalField, Is.EqualTo( decimal 16 ))
87+
88+ [<Test>]
89+ member this.SubtractionDateTimeTest1 () =
90+ use session = base .Domain.OpenSession ()
91+ use ts = session.OpenTransaction ()
92+ X ( DateTimeField = new System.DateTime( System.DateTime.Now.Year, 2 , 15 )) |> ignore
93+ let alll = session.Query.All< X> ()
94+ let query =
95+ query {
96+ for x in alll do
97+ if ( x.DateTimeField - System.TimeSpan.FromDays( 2 )) > new System.DateTime( System.DateTime.Now.Year, 2 , 10 ) then
98+ yield x
99+ }
100+ let list = query |> Seq.toArray
101+ Assert.That( list.Length, Is.EqualTo( 1 ))
102+ let fetched = list.[ 0 ]
103+ Assert.That( fetched.DateTimeField, Is.EqualTo( new System.DateTime( System.DateTime.Now.Year, 2 , 15 )))
104+
105+ [<Test>]
106+ member this.SubtractionDateTimeTest2 () =
107+ use session = base .Domain.OpenSession ()
108+ use ts = session.OpenTransaction ()
109+ X ( DateTimeField = new System.DateTime( System.DateTime.Now.Year, 2 , 15 )) |> ignore
110+ let alll = session.Query.All< X> ()
111+ let query =
112+ query {
113+ for x in alll do
114+ if ( x.DateTimeField - new System.DateTime( System.DateTime.Now.Year, 2 , 10 )) > System.TimeSpan.FromDays( 2 ) then
115+ yield x
116+ }
117+ let list = query |> Seq.toArray
118+ Assert.That( list.Length, Is.EqualTo( 1 ))
119+ let fetched = list.[ 0 ]
120+ Assert.That( fetched.DateTimeField, Is.EqualTo( new System.DateTime( System.DateTime.Now.Year, 2 , 15 )))
121+
122+ [<Test>]
123+ member this.SubtractionTimeSpanTest () =
124+ Require.ProviderIsNot ( StorageProvider.PostgreSql)
125+ use session = base .Domain.OpenSession ()
126+ use ts = session.OpenTransaction ()
127+ X ( TimeSpanField = System.TimeSpan.FromTicks( 111222333 )) |> ignore
128+ let alll = session.Query.All< X> ()
129+ let query =
130+ query {
131+ for x in alll do
132+ if ( x.TimeSpanField - System.TimeSpan.FromTicks( 111222 )) > System.TimeSpan.FromTicks( 111222 ) then
133+ yield x
134+ }
135+ let list = query |> Seq.toArray
136+ Assert.That( list.Length, Is.EqualTo( 1 ))
137+ let fetched = list.[ 0 ]
138+ Assert.That( fetched.TimeSpanField, Is.EqualTo( System.TimeSpan.FromTicks( 111222333 )))
139+
140+ [<Test>]
141+ member this.SubtractionDecimalTest () =
142+ use session = base .Domain.OpenSession ()
143+ use ts = session.OpenTransaction ()
144+ X ( DecimalField = decimal 16.0 ) |> ignore
145+ let alll = session.Query.All< X> ()
146+ let query =
147+ query {
148+ for x in alll do
149+ if x.DecimalField - x.DecimalField + decimal 3 <= decimal 5 then
150+ yield x
151+ }
152+ let list = query |> Seq.toArray
153+ Assert.That( list.Length, Is.EqualTo( 1 ))
154+ let fetched = list.[ 0 ]
155+ Assert.That( fetched.DecimalField, Is.EqualTo( decimal 16 ))
156+
157+ [<Test>]
158+ member this.MultiplyDecimalTest () =
159+ Require.ProviderIsNot StorageProvider.Firebird
160+ use session = base .Domain.OpenSession ()
161+ use ts = session.OpenTransaction ()
162+ X ( DecimalField = decimal 16.0 ) |> ignore
163+ let alll = session.Query.All< X> ()
164+ let query =
165+ query {
166+ for x in alll do
167+ if x.DecimalField * x.DecimalField <= decimal 350 then
168+ yield x
169+ }
170+ let list = query |> Seq.toArray
171+ Assert.That( list.Length, Is.EqualTo( 1 ))
172+ let fetched = list.[ 0 ]
173+ Assert.That( fetched.DecimalField, Is.EqualTo( decimal 16 ))
174+
175+ [<Test>]
176+ member this.DivideDecimalTest () =
177+ use session = base .Domain.OpenSession ()
178+ use ts = session.OpenTransaction ()
179+ X ( DecimalField = decimal 16.0 ) |> ignore
180+ let alll = session.Query.All< X> ()
181+ let query =
182+ query {
183+ for x in alll do
184+ if x.DecimalField / decimal 2 <= decimal 16 then
185+ yield x
186+ }
187+ let list = query |> Seq.toArray
188+ Assert.That( list.Length, Is.EqualTo( 1 ))
189+ let fetched = list.[ 0 ]
190+ Assert.That( fetched.DecimalField, Is.EqualTo( decimal 16 ))
0 commit comments