Skip to content

Множественные проблемы с тестами #9

@Civil

Description

@Civil
  1. Вывод тестов неконсистентен, результаты похожи на CSV, но таковыми не являются
    ksnip_20220918-173838

В данном примере (вывод dotnet'а) результаты Single-thread results - CSV

All results - уже нет, так как разделитель меняется с , на ;, что не соответствует ожиданиям библиотек парсинга

Присутствует непонятный Units results полностью идентичный Single-thread Units results, но при этом отсутствует All Units results

  1. Отсутствует документация по выхлопу - непонятно чем отличается Units results от обычных.
  2. Тест nodejs не сохраняет вывод в файл, поэтому его приходится прогонять через sed (чтобы убрать спецсимволы для цветовых последовательностей) и через tee писать в файл
  3. В тесте js поле Runtime и Operating System перепутано местами (Operating System v18.7.0, Runtime linux x64)
  4. Не во всех тестах присутствует All results
  5. Тест dotnet6 периодически падает (непонятно по какой логике) со следующим стек-трейсом:
Unhandled exception. System.AggregateException: One or more errors occurred. (Index was out of range. Must be non-negative and less than the size of the collection. (Parameter 'chunkLength'))
 ---> System.ArgumentOutOfRangeException: Index was out of range. Must be non-negative and less than the size of the collection. (Parameter 'chunkLength')
   at System.Text.StringBuilder.ToString()
   at EntityFX.NetBenchmark.Core.Generic.MemoryBenchmarkBase`1.BenchRandomMemory() in /Users/civil/src/EntityFX-Bench/src/dotnet/EntityFX.NetBenchamarks.Core/Generic/MemoryBenchmarkBase.cs:line 71
   at EntityFX.NetBenchmark.Core.Generic.ParallelMemoryBenchmark.<BenchImplementation>b__1_1(Int32 a) in /Users/civil/src/EntityFX-Bench/src/dotnet/EntityFX.NetBenchamarks.Core/Generic/ParallelMemoryBenchmark.cs:line 18
   at EntityFX.NetBenchmark.Core.Generic.BenchmarkBase`1.<>c__DisplayClass7_1`2.<BenchInParallel>b__2() in /Users/civil/src/EntityFX-Bench/src/dotnet/EntityFX.NetBenchamarks.Core/Generic/BenchmarkBase.cs:line 104
   at System.Threading.ExecutionContext.RunFromThreadPoolDispatchLoop(Thread threadPoolThread, ExecutionContext executionContext, ContextCallback callback, Object state)
--- End of stack trace from previous location ---
   at System.Threading.Tasks.Task.ExecuteWithThreadLocal(Task& currentTaskSlot, Thread threadPoolThread)
   --- End of inner exception stack trace ---
   at System.Threading.Tasks.Task.WaitAllCore(Task[] tasks, Int32 millisecondsTimeout, CancellationToken cancellationToken)
   at System.Threading.Tasks.Task.WaitAll(Task[] tasks)
   at EntityFX.NetBenchmark.Core.Generic.BenchmarkBase`1.BenchInParallel[TBench,TBenchResult](Func`1 buildFunc, Func`2 benchFunc, Action`2 setBenchResultFunc) in /Users/civil/src/EntityFX-Bench/src/dotnet/EntityFX.NetBenchamarks.Core/Generic/BenchmarkBase.cs:line 102
   at EntityFX.NetBenchmark.Core.Generic.ParallelMemoryBenchmark.BenchImplementation() in /Users/civil/src/EntityFX-Bench/src/dotnet/EntityFX.NetBenchamarks.Core/Generic/ParallelMemoryBenchmark.cs:line 16
   at EntityFX.NetBenchmark.Core.Generic.BenchmarkBase`1.Bench() in /Users/civil/src/EntityFX-Bench/src/dotnet/EntityFX.NetBenchamarks.Core/Generic/BenchmarkBase.cs:line 44
   at EntityFX.NetBenchmark.MainClass.Main(String[] args) in /Users/civil/src/EntityFX-Bench/src/dotnet/EntityFX.NetBenchmark/Program.cs:line 105

Воспроизводится на нескольких системах, так что проблема с железом крайне маловероятна (но во всех случаях рантайм 6.0.401)

В плане тестов, мое предложение сделать в КАЖДОМ тесте вывод в отдельный файл results.json структуры вида (далее идет псевдо-json):

{
       "metadata": {
           "Runtime": "language runtime information",
           "OS": "Os information"
          ....
       },
       "tests": [
	"TEST_NAME": {
		"IsMultiThreaded": "bool",
		"Result": "float64",
		"LowerIsBetter": "bool"
	},
        ....
      ]
}

Чтобы при парсинге была доступна базовая информация. Также, если Units варианты чем-то принципиально отличаются, возможно стоит добавить формулу конвертации в json одним из полей в описании теста.

Как минимум в части используемых языков есть стандартная библиотека для конвертации структур в json.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions