import unittest
from parsec.state import BasicState
from skill_tree.excercises.market_math import processor
import skill_tree.excercises.markdown as mk
def math_processor(context):
""" math(str)->str
对文本内容预处理,将公式标记为前端可展示的 html。
"""
md = context
new_md = []
math_ctx = {
"enter": False,
"chars": []
}
count = len(md)
i = 0
while i < count:
c = md[i]
if c == '$':
if math_ctx['enter']:
j = 0
chars = math_ctx['chars']
length = len(chars)
while j < length:
cc = chars[j]
if cc == '_':
next_c = chars[j + 1]
if next_c == '{':
subs = []
cursor = 2
next_c = chars[j + cursor]
while next_c != '}':
subs.append(next_c)
cursor += 1
next_c = chars[j + cursor]
sub = ''.join(subs)
new_md.append(f'{sub}')
j += cursor
else:
new_md.append(f'{next_c}')
j += 1
elif cc == '^':
next_c = chars[j + 1]
if next_c == '{':
subs = []
cursor = 2
next_c = chars[j + cursor]
while next_c != '}':
subs.append(next_c)
cursor += 1
next_c = chars[j + cursor]
sub = ''.join(subs)
new_md.append(f'{sub}')
j += cursor
else:
new_md.append(f'{next_c}')
j += 1
else:
new_md.append(cc)
j += 1
math_ctx['enter'] = False
math_ctx['chars'] = []
else:
math_ctx['enter'] = True
math_ctx['chars'] = []
else:
if math_ctx['enter']:
math_ctx['chars'].append(c)
else:
new_md.append(c)
i += 1
return "".join(new_md)
data = """
# Hello World
以下 `Hello World` 程序中,能够正确输出内容的是:
## 答案
```java
package app;
public class App {
public static void main(String[] args){
System.out.println("Hello World");
}
}
```
## 选项
### B
```java
package app;
public class App {
public int main(){
System.out.printf("Hello World");
return 0;
}
}
```
### C
```java
package app;
public class App {
public static void main(String[] args){
println("Hello World");
}
}
```
### D
```java
package app;
import stdout
public class App {
public int main(){
print("Hello World\n");
return 0;
}
}
```
"""
class MarkdownTestCase(unittest.TestCase):
def test_basic(self):
state = BasicState(data.strip())
doc = mk.parse(state)
self.assertEqual(doc.title, "Hello World")
self.assertEqual(len(doc.options), 3)
self.assertEqual(doc.description[0].source.strip(), """以下 `Hello World` 程序中,能够正确输出内容的是:""")
self.assertEqual(doc.answer[0].language, "java")
self.assertEqual(doc.answer[0].source, """package app;
public class App {
public static void main(String[] args){
System.out.println("Hello World");
}
}""")
self.assertEqual(doc.options[0].paras[0].language, "java")
self.assertEqual(doc.options[0].paras[0].source, """package app;
public class App {
public int main(){
System.out.printf("Hello World");
return 0;
}
}""")
self.assertEqual(doc.options[1].paras[0].language, "java")
self.assertEqual(doc.options[1].paras[0].source, """package app;
public class App {
public static void main(String[] args){
println("Hello World");
}
}""")
self.assertEqual(doc.options[2].paras[0].language, "java")
self.assertEqual(doc.options[2].paras[0].source, """package app;
import stdout
public class App {
public int main(){
print("Hello World\n");
return 0;
}
}
""")
class MathTestCase(unittest.TestCase):
def test_parse(self):
data = "$e^{pi}$"
result = processor(data)
self.assertEqual(result, math_processor(data))
def test_pack(self):
data = "ploy is $e^{pi}$ in plain text"
result = processor(data)
self.assertEqual(result, math_processor(data))
def test_simple(self):
data = "ploy is $x_0$ in plain text"
result = processor(data)
self.assertEqual(result, math_processor(data))
def test_left(self):
data = "$x_0$ at start of plain text"
result = processor(data)
self.assertEqual(result, math_processor(data))
def test_right(self):
data = "ploy is $x_0$"
result = processor(data)
self.assertEqual(result, math_processor(data))
spark = """# Neo4j的Apache Spark连接器
Apache Spark 的 Neo4j 连接器旨在使图与 Spark 的集成变得容易。有两种有效的使用连接器的方法:
- **作为数据源**:在 Spark 中将任何节点或关系集作为 DataFrame 读取
- **作为接收器**:将任何 DataFrame 作为节点或关系的集合写入 Neo4j,或者;使用 Cypher 语句将 DataFrame 中的记录处理为您选择的图模式。
由于连接器基于新的 Spark 数据源 API,因此适用于 Python 和 R 等语言的其他 Spark 解释器也可以使用。
此连接器适用于 Neo4j 3.5 和 Neo4j 的整个 4+ 系列,无论是作为单个实例运行、在因果集群模式下运行,还是作为 Neo4j Aura 中的托管服务运行。连接器不依赖于企业功能,因此也可以与 Neo4j 社区一起使用,并具有适当的版本号。
此连接器当前支持 Spark 2.4.5+ with Scala 2.11 和 Scala 2.12 以及 Spark 3.0+ with Scala 2.12。根据 Spark 和 Scala 版本的组合,您将需要不同的 JAR。JAR 以以下形式命名`neo4j-connector-apache-spark_${scala.version}_${spark.version}_${connector.version}`
问题:
下列说法中,不正确的一项是?
## 答案
Spark连接器在开源社区版上无法使用
## 选项
### A
Spark 连接器可用于从Spark中读取或写入数据
### B
Spark 连接器使用Java驱动程序来连接底层Neo4j图数据库
### C
Spark擅长处理DataFrame,Neo4j擅长处理图数据,使用连接器可以发挥两个的优势
### D
Spark连接器在开源社区版上无法使用
"""