@@ -6,9 +6,19 @@ import org.jetbrains.kotlinx.dataframe.DataRow
6
6
import org.jetbrains.kotlinx.dataframe.annotations.DataSchema
7
7
import org.jetbrains.kotlinx.dataframe.api.add
8
8
import org.jetbrains.kotlinx.dataframe.api.cast
9
+ import org.jetbrains.kotlinx.dataframe.api.columnOf
10
+ import org.jetbrains.kotlinx.dataframe.api.dataFrameOf
9
11
import org.jetbrains.kotlinx.dataframe.api.generateCode
12
+ import org.jetbrains.kotlinx.dataframe.api.schema
10
13
import org.jetbrains.kotlinx.dataframe.impl.codeGen.ReplCodeGenerator
11
14
import org.jetbrains.kotlinx.dataframe.io.readJsonStr
15
+ import org.jetbrains.kotlinx.dataframe.schema.CompareResult.Equals
16
+ import org.jetbrains.kotlinx.dataframe.schema.CompareResult.IsDerived
17
+ import org.jetbrains.kotlinx.dataframe.schema.CompareResult.IsSuper
18
+ import org.jetbrains.kotlinx.dataframe.schema.CompareResult.None
19
+ import org.jetbrains.kotlinx.dataframe.schema.ComparisonMode.LENIENT
20
+ import org.jetbrains.kotlinx.dataframe.schema.ComparisonMode.STRICT
21
+ import org.jetbrains.kotlinx.dataframe.schema.ComparisonMode.STRICT_FOR_NESTED_SCHEMAS
12
22
import org.junit.Test
13
23
14
24
class MatchSchemeTests {
@@ -99,4 +109,91 @@ class MatchSchemeTests {
99
109
val res = df.generateCode(false , true )
100
110
println (res)
101
111
}
112
+
113
+ @Test
114
+ fun `simple data schema comparison` () {
115
+ val scheme1 = dataFrameOf(
116
+ " a" to columnOf(1 , 2 , 3 , null ),
117
+ " b" to columnOf(1.0 , 2.0 , 3.0 , 4.0 ),
118
+ ).schema()
119
+
120
+ val scheme2 = dataFrameOf(
121
+ " a" to columnOf(1 , 2 , 3 , 4 ),
122
+ " b" to columnOf(1.0 , 2.0 , 3.0 , 4.0 ),
123
+ ).schema()
124
+
125
+ val scheme3 = dataFrameOf(
126
+ " c" to columnOf(1 , 2 , 3 , 4 ),
127
+ ).schema()
128
+
129
+ scheme1.compare(scheme1, LENIENT ) shouldBe Equals
130
+ scheme2.compare(scheme2, LENIENT ) shouldBe Equals
131
+ scheme1.compare(scheme2, LENIENT ) shouldBe IsSuper
132
+ scheme2.compare(scheme1, LENIENT ) shouldBe IsDerived
133
+ scheme1.compare(scheme3, LENIENT ) shouldBe None
134
+
135
+ scheme1.compare(scheme1, STRICT_FOR_NESTED_SCHEMAS ) shouldBe Equals
136
+ scheme2.compare(scheme2, STRICT_FOR_NESTED_SCHEMAS ) shouldBe Equals
137
+ scheme1.compare(scheme2, STRICT_FOR_NESTED_SCHEMAS ) shouldBe IsSuper
138
+ scheme2.compare(scheme1, STRICT_FOR_NESTED_SCHEMAS ) shouldBe IsDerived
139
+ scheme1.compare(scheme3, STRICT_FOR_NESTED_SCHEMAS ) shouldBe None
140
+
141
+ scheme1.compare(scheme1, STRICT ) shouldBe Equals
142
+ scheme2.compare(scheme2, STRICT ) shouldBe Equals
143
+ scheme1.compare(scheme2, STRICT ) shouldBe None
144
+ scheme2.compare(scheme1, STRICT ) shouldBe None
145
+ }
146
+
147
+ @Test
148
+ fun `nested data schema comparison` () {
149
+ val scheme1 = dataFrameOf(
150
+ " a" to columnOf(
151
+ " b" to columnOf(1.0 , 2.0 , 3.0 , null ),
152
+ ),
153
+ ).schema()
154
+
155
+ val scheme2 = dataFrameOf(
156
+ " a" to columnOf(
157
+ " b" to columnOf(1.0 , 2.0 , 3.0 , 4.0 ),
158
+ ),
159
+ ).schema()
160
+
161
+ val scheme3 = dataFrameOf(
162
+ " c" to columnOf(1 , 2 , 3 , 4 ),
163
+ ).schema()
164
+
165
+ val scheme4 = dataFrameOf(
166
+ " a" to columnOf(
167
+ " b" to columnOf(1.0 , 2.0 , 3.0 , null ),
168
+ ),
169
+ " c" to columnOf(1 , 2 , 3 , 4 ),
170
+ ).schema()
171
+
172
+ scheme1.compare(scheme1, LENIENT ) shouldBe Equals
173
+ scheme2.compare(scheme2, LENIENT ) shouldBe Equals
174
+ scheme1.compare(scheme2, LENIENT ) shouldBe IsSuper
175
+ scheme2.compare(scheme1, LENIENT ) shouldBe IsDerived
176
+ scheme1.compare(scheme3, LENIENT ) shouldBe None
177
+
178
+ scheme1.compare(scheme4, LENIENT ) shouldBe IsSuper
179
+ scheme4.compare(scheme1, LENIENT ) shouldBe IsDerived
180
+
181
+ scheme1.compare(scheme1, STRICT_FOR_NESTED_SCHEMAS ) shouldBe Equals
182
+ scheme2.compare(scheme2, STRICT_FOR_NESTED_SCHEMAS ) shouldBe Equals
183
+ scheme1.compare(scheme2, STRICT_FOR_NESTED_SCHEMAS ) shouldBe None
184
+ scheme2.compare(scheme1, STRICT_FOR_NESTED_SCHEMAS ) shouldBe None
185
+ scheme1.compare(scheme3, STRICT_FOR_NESTED_SCHEMAS ) shouldBe None
186
+
187
+ scheme1.compare(scheme4, STRICT_FOR_NESTED_SCHEMAS ) shouldBe IsSuper
188
+ scheme4.compare(scheme1, STRICT_FOR_NESTED_SCHEMAS ) shouldBe IsDerived
189
+ scheme2.compare(scheme4, STRICT_FOR_NESTED_SCHEMAS ) shouldBe None
190
+ scheme4.compare(scheme2, STRICT_FOR_NESTED_SCHEMAS ) shouldBe None
191
+
192
+ scheme1.compare(scheme1, STRICT ) shouldBe Equals
193
+ scheme2.compare(scheme2, STRICT ) shouldBe Equals
194
+ scheme1.compare(scheme2, STRICT ) shouldBe None
195
+ scheme2.compare(scheme1, STRICT ) shouldBe None
196
+ scheme1.compare(scheme3, STRICT ) shouldBe None
197
+ scheme3.compare(scheme1, STRICT ) shouldBe None
198
+ }
102
199
}
0 commit comments