-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmain_test.go
175 lines (154 loc) · 6.07 KB
/
main_test.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
package main
import (
"fmt"
"log"
"testing"
"github.com/shinanca/gonec/bincode"
"github.com/shinanca/gonec/core"
"github.com/shinanca/gonec/parser"
)
func TestRun(t *testing.T) {
env := core.NewEnv()
script := `
дтнач = ТекущаяДата()
а = [](0,1000000)
для н=1 по 1000000 цикл
а=а+[н]+[н*10]
конеццикла
к=0
для каждого н из а цикл
к=к+н
конеццикла
сообщить(к, ПрошлоВремениС(дтнач))
#gonec.exe -web -t
#go tool pprof -pdf ./gonec.exe http://localhost:5000/debug/pprof/profile?seconds=60 > cpu.pdf
#go tool pprof -pdf --alloc_objects ./gonec.exe http://localhost:5000/debug/pprof/heap > mem.pdf
а=Новый("__функциональнаяструктуратест__",{"ПолеСтрока": "цщушаццке", "ПолеЦелоеЧисло": 3456})
сообщить(а)
сообщить("Хэш", Хэш(а))
а=Новый("__функциональнаяструктуратест__")
а.Полецелоечисло = 2243
а.ПолеСтрока = "авузлхвсзщл"
сообщить(а)
сообщить("Хэш", Хэш(а))
сообщить(а.ВСтроку(), а.ПолеСтрока)
Сообщить(Строка(а))
Сообщить(Структура(Строка(а)))
б=Новый("__ФункциональнаяСтруктураТест__", Строка(а)) //получаем объект из строки json
сообщить("Из json:",б.ВСтроку(), б.ПолеСтрока)
# массив с вложенным массивом со структурой и датой
а=[2, 1, [3, {"привет":2, "а":1}, Дата("2017-08-17T09:23:00+03:00")], 4]
Сообщить("Исходное:", а, а[2][1].а)
а[2][1].а=Дата("2017-08-17T09:23:00+03:00")+ДлительностьДня*5
# приведение массива или структуры к типу "строка" означает сериализацию в json, со всеми вложенными массивами и структурами
Сообщить("Измененное:", а, а[2][1].а)
Сообщить(Строка(а))
Сообщить("Ключи в порядке сортировки:", а[2][1].Ключи())
Сообщить("Формат даты:", а[2][1].а.Формат("дд.ММ.гггг"))
# приведение строки к массиву или структуре означает десериализацию из json
Сообщить(Массив("[1,2,3.5,4]"))
Сообщить(Массив(Строка(а)))
а=[2,1,4.5,3]
Сообщить(а, а[2]*2)
Сообщить(Строка(а))
а.Сортировать()
а.Обратить()
Сообщить("После сортировки и обращения:",а)
функция фиб(н)
если н = 0 тогда
возврат 0
иначеесли н = 1 тогда
возврат 1
конецесли
возврат фиб(н-1) + фиб(н-2)
конецфункции
сообщить(фиб(10))
функция фибт(н0, н1, к)
если к = 0 тогда
возврат н0
иначеесли к = 1 тогда
возврат н1
конецесли
возврат фибт(н1, н0+н1, к-1)
конецфункции
функция фиб2(н)
возврат фибт(0, 1, н)
конецфункции
сообщить(фиб2(10))
функция фиб3(н)
если н = 0 тогда
возврат 0
иначеесли н = 1 тогда
возврат 1
конецесли
н0, н1 = 0, 1
для к = н по 2 цикл
тмп = н0 + н1
н0 = н1
н1 = тмп
конеццикла
возврат н1
конецфункции
сообщить(фиб3(10))
гр = Новый ГруппаОжидания
гр.Добавить(3)
Для н=1 по 3 Цикл
старт Функция(грп,нн)
Сообщить(нн)
грп.Завершить()
КонецФункции(гр,н)
КонецЦикла
гр.Ожидать()
Функция ОбработатьСерв(вых,вх)
Сообщить("Сервер получил запрос:\n",вх.Сообщение())
вых.Отправить({"Статус":200, "Тело":"Запрос обработан успешно"})
КонецФункции
серв = Новый Сервер
Попытка
серв.Открыть("http", "127.0.0.1:9990", 1000, {"/test":ОбработатьСерв}, 0)
Исключение
Сообщить(ОписаниеОшибки())
Сообщить("Кажется сервер уже запущен, или тут какая-то другая ошибка, но мы все равно попробуем отправить запрос :)")
КонецПопытки
//асинхронно
гр = Новый ГруппаОжидания
фобр = Функция (соед)
Сообщить("Устанавливаем соединение:",соед)
запр={
"Метод": "GET",
"Путь": "http://127.0.0.1:9990/test",
}
Сообщить("Отправляем:", запр)
Сообщить("Ответ:",соед.Запрос(запр))
соед.Данные()[0].Завершить()
соед.Закрыть()
КонецФункции
кли = Новый Клиент
гр.Добавить(1)
кли.Открыть("http", "", фобр, [гр])
гр.Ожидать()
//синхронно
кли = Новый Клиент
соед = кли.Соединить("http","")
Сообщить("Устанавливаем соединение:",соед)
запр={
"Метод": "GET",
"Путь": "http://127.0.0.1:9990/test",
}
Сообщить("Отправляем:", запр)
Сообщить("Ответ:",соед.Запрос(запр))
соед.Закрыть()
кли.Закрыть()
серв.Закрыть()
`
parser.EnableErrorVerbose()
_, stmts, err := bincode.ParseSrc(script)
if err != nil {
log.Fatal(err)
}
fmt.Println(stmts)
_, err = bincode.Run(stmts, env)
if err != nil {
log.Fatal(err)
}
}