Main.hs 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192
  1. {-# LANGUAGE CPP #-}
  2. {-# LANGUAGE TemplateHaskell #-}
  3. {-# OPTIONS_GHC -Wno-orphans #-}
  4. module Main (main) where
  5. import Control.DeepSeq
  6. import Control.DeepSeq.Generics
  7. import Criterion.Main
  8. import Data.Text (Text)
  9. import Language.Haskell.TH
  10. import Language.Haskell.TH.Syntax
  11. import Database.Persist.Quasi
  12. import Database.Persist.TH
  13. import Models
  14. main :: IO ()
  15. main = defaultMain
  16. [ bgroup "mkPersist"
  17. [ bench "From File" $ nfIO $ mkPersist' $(persistFileWith lowerCaseSettings "bench/models-slowly")
  18. --, bgroup "Non-Null Fields"
  19. -- , bgroup "Increasing model count"
  20. -- [ bench "1x10" $ nfIO $ mkPersist' $( parseReferencesQ (mkModels 10 10))
  21. -- , bench "10x10" $ nfIO $ mkPersist' $(parseReferencesQ (mkModels 10 10))
  22. -- , bench "100x10" $ nfIO $ mkPersist' $(parseReferencesQ (mkModels 100 10))
  23. -- -- , bench "1000x10" $ nfIO $ mkPersist' $(parseReferencesQ (mkModels 1000 10))
  24. -- ]
  25. -- , bgroup "Increasing field count"
  26. -- [ bench "10x1" $ nfIO $ mkPersist' $(parseReferencesQ (mkModels 10 1))
  27. -- , bench "10x10" $ nfIO $ mkPersist' $(parseReferencesQ (mkModels 10 10))
  28. -- , bench "10x100" $ nfIO $ mkPersist' $(parseReferencesQ (mkModels 10 100))
  29. -- -- , bench "10x1000" $ nfIO $ mkPersist' $(parseReferencesQ (mkModels 10 1000))
  30. -- ]
  31. -- ]
  32. --, bgroup "Nullable"
  33. -- [ bgroup "Increasing model count"
  34. -- [ bench "20x10" $ nfIO $ mkPersist' $(parseReferencesQ (mkNullableModels 20 10))
  35. -- , bench "40x10" $ nfIO $ mkPersist' $(parseReferencesQ (mkNullableModels 40 10))
  36. -- , bench "60x10" $ nfIO $ mkPersist' $(parseReferencesQ (mkNullableModels 60 10))
  37. -- , bench "80x10" $ nfIO $ mkPersist' $(parseReferencesQ (mkNullableModels 80 10))
  38. -- , bench "100x10" $ nfIO $ mkPersist' $(parseReferencesQ (mkNullableModels 100 10))
  39. -- -- , bench "1000x10" $ nfIO $ mkPersist' $(parseReferencesQ (mkNullableModels 1000 10))
  40. -- ]
  41. -- , bgroup "Increasing field count"
  42. -- [ bench "10x20" $ nfIO $ mkPersist' $(parseReferencesQ (mkNullableModels 10 20))
  43. -- , bench "10x40" $ nfIO $ mkPersist' $(parseReferencesQ (mkNullableModels 10 40))
  44. -- , bench "10x60" $ nfIO $ mkPersist' $(parseReferencesQ (mkNullableModels 10 60))
  45. -- , bench "10x80" $ nfIO $ mkPersist' $(parseReferencesQ (mkNullableModels 10 80))
  46. -- , bench "10x100" $ nfIO $ mkPersist' $(parseReferencesQ (mkNullableModels 10 100))
  47. -- -- , bench "10x1000" $ nfIO $ mkPersist' $(parseReferencesQ (mkNullableModels 10 1000))
  48. -- ]
  49. -- ]
  50. ]
  51. ]
  52. -- Orphan instances for NFData Template Haskell types
  53. instance NFData Overlap where
  54. rnf = genericRnf
  55. instance NFData AnnTarget where
  56. rnf = genericRnf
  57. instance NFData RuleBndr where
  58. rnf = genericRnf
  59. instance NFData Role where
  60. rnf = genericRnf
  61. instance NFData Phases where
  62. rnf = genericRnf
  63. instance NFData InjectivityAnn where
  64. rnf = genericRnf
  65. instance NFData FamilyResultSig where
  66. rnf = genericRnf
  67. instance NFData RuleMatch where
  68. rnf = genericRnf
  69. instance NFData TypeFamilyHead where
  70. rnf = genericRnf
  71. instance NFData TySynEqn where
  72. rnf = genericRnf
  73. instance NFData Inline where
  74. rnf = genericRnf
  75. instance NFData Pragma where
  76. rnf = genericRnf
  77. instance NFData FixityDirection where
  78. rnf = genericRnf
  79. instance NFData Safety where
  80. rnf = genericRnf
  81. instance NFData Fixity where
  82. rnf = genericRnf
  83. instance NFData Callconv where
  84. rnf = genericRnf
  85. instance NFData Foreign where
  86. rnf = genericRnf
  87. instance NFData SourceStrictness where
  88. rnf = genericRnf
  89. instance NFData SourceUnpackedness where
  90. rnf = genericRnf
  91. instance NFData FunDep where
  92. rnf = genericRnf
  93. instance NFData Bang where
  94. rnf = genericRnf
  95. #if MIN_VERSION_template_haskell(2,12,0)
  96. instance NFData PatSynDir where
  97. rnf = genericRnf
  98. instance NFData PatSynArgs where
  99. rnf = genericRnf
  100. instance NFData DerivStrategy where
  101. rnf = genericRnf
  102. instance NFData DerivClause where
  103. rnf = genericRnf
  104. #endif
  105. instance NFData Con where
  106. rnf = genericRnf
  107. instance NFData Range where
  108. rnf = genericRnf
  109. instance NFData Clause where
  110. rnf = genericRnf
  111. instance NFData PkgName where
  112. rnf = genericRnf
  113. instance NFData Dec where
  114. rnf = genericRnf
  115. instance NFData Stmt where
  116. rnf = genericRnf
  117. instance NFData TyLit where
  118. rnf = genericRnf
  119. instance NFData NameSpace where
  120. rnf = genericRnf
  121. instance NFData Body where
  122. rnf = genericRnf
  123. instance NFData Guard where
  124. rnf = genericRnf
  125. instance NFData Match where
  126. rnf = genericRnf
  127. instance NFData ModName where
  128. rnf = genericRnf
  129. instance NFData Pat where
  130. rnf = genericRnf
  131. instance NFData TyVarBndr where
  132. rnf = genericRnf
  133. instance NFData NameFlavour where
  134. rnf = genericRnf
  135. instance NFData Type where
  136. rnf = genericRnf
  137. instance NFData Exp where
  138. rnf = genericRnf
  139. instance NFData Lit where
  140. rnf = genericRnf
  141. instance NFData OccName where
  142. rnf = genericRnf
  143. instance NFData Name where
  144. rnf = genericRnf