139 lines
4.1 KiB
Go
139 lines
4.1 KiB
Go
package main
|
||
|
||
import (
|
||
"fmt"
|
||
"os"
|
||
"strconv"
|
||
"strings"
|
||
)
|
||
|
||
func main() {
|
||
// Очищаем тестовые данные
|
||
os.RemoveAll("./data/test-linedb-insert")
|
||
|
||
fmt.Println("=== LineDb Insert Operations Demo ===")
|
||
|
||
// Получаем номера тестов из аргументов командной строки
|
||
testNumbers := parseTestNumbers()
|
||
|
||
// Выполняем тесты
|
||
if len(testNumbers) == 0 {
|
||
// Если номера не указаны, выполняем все тесты
|
||
runAllTests()
|
||
} else {
|
||
// Выполняем только указанные тесты
|
||
runSelectedTests(testNumbers)
|
||
}
|
||
|
||
fmt.Println("\n=== Все тесты завершены ===")
|
||
}
|
||
|
||
// parseTestNumbers парсит номера тестов из аргументов командной строки
|
||
func parseTestNumbers() []int {
|
||
if len(os.Args) < 2 {
|
||
return []int{}
|
||
}
|
||
|
||
// Получаем аргумент после имени программы
|
||
arg := os.Args[1]
|
||
|
||
// Проверяем, что это не флаг помощи
|
||
if arg == "-h" || arg == "--help" || arg == "help" {
|
||
printUsage()
|
||
return []int{}
|
||
}
|
||
|
||
// Разбиваем по запятой
|
||
parts := strings.Split(arg, ",")
|
||
var numbers []int
|
||
|
||
for _, part := range parts {
|
||
part = strings.TrimSpace(part)
|
||
if part == "" {
|
||
continue
|
||
}
|
||
|
||
num, err := strconv.Atoi(part)
|
||
if err != nil {
|
||
fmt.Printf("Ошибка: '%s' не является числом\n", part)
|
||
printUsage()
|
||
return []int{}
|
||
}
|
||
|
||
// Проверяем диапазон
|
||
if num < 1 || num > 8 {
|
||
fmt.Printf("Ошибка: номер теста %d должен быть от 1 до 8\n", num)
|
||
printUsage()
|
||
return []int{}
|
||
}
|
||
|
||
numbers = append(numbers, num)
|
||
}
|
||
|
||
return numbers
|
||
}
|
||
|
||
// printUsage выводит справку по использованию
|
||
func printUsage() {
|
||
fmt.Println("\nИспользование:")
|
||
fmt.Println(" go run main.go # Запустить все тесты")
|
||
fmt.Println(" go run main.go 1 # Запустить только тест 1")
|
||
fmt.Println(" go run main.go 1,3 # Запустить тесты 1 и 3")
|
||
fmt.Println(" go run main.go 2,3,4 # Запустить тесты 2, 3 и 4")
|
||
fmt.Println(" go run main.go help # Показать эту справку")
|
||
fmt.Println("\nДоступные тесты:")
|
||
fmt.Println(" 1 - Вставка одной записи")
|
||
fmt.Println(" 2 - Вставка массива записей")
|
||
fmt.Println(" 3 - Автоматическая генерация ID")
|
||
fmt.Println(" 4 - Партиционированные коллекции")
|
||
fmt.Println(" 5 - Проверка уникальности")
|
||
fmt.Println(" 6 - Различные типы данных")
|
||
fmt.Println(" 7 - Массовая вставка")
|
||
fmt.Println(" 8 - Множественные коллекции")
|
||
os.Exit(0)
|
||
}
|
||
|
||
// runAllTests запускает все тесты
|
||
func runAllTests() {
|
||
testSingleInsert()
|
||
testArrayInsert()
|
||
testAutoID()
|
||
testPartitionedCollections()
|
||
testUniquenessCheck()
|
||
testDifferentDataTypes()
|
||
testBulkInsert()
|
||
testMultipleCollections()
|
||
}
|
||
|
||
// runSelectedTests запускает только выбранные тесты
|
||
func runSelectedTests(numbers []int) {
|
||
for _, num := range numbers {
|
||
switch num {
|
||
case 1:
|
||
fmt.Println("1. Вставка одной записи")
|
||
testSingleInsert()
|
||
case 2:
|
||
fmt.Println("2. Вставка массива записей")
|
||
testArrayInsert()
|
||
case 3:
|
||
fmt.Println("3. Автоматическая генерация ID")
|
||
testAutoID()
|
||
case 4:
|
||
fmt.Println("4. Партиционированные коллекции")
|
||
testPartitionedCollections()
|
||
case 5:
|
||
fmt.Println("5. Проверка уникальности")
|
||
testUniquenessCheck()
|
||
case 6:
|
||
fmt.Println("6. Различные типы данных")
|
||
testDifferentDataTypes()
|
||
case 7:
|
||
fmt.Println("7. Массовая вставка")
|
||
testBulkInsert()
|
||
case 8:
|
||
fmt.Println("8. Множественные коллекции")
|
||
testMultipleCollections()
|
||
}
|
||
}
|
||
}
|