Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Open
Civil opened this issue Sep 18, 2022 · 0 comments
Open

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

Civil opened this issue Sep 18, 2022 · 0 comments

Comments

@Civil
Copy link
Contributor

Civil commented Sep 18, 2022

  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.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant