Death Socket consists of three projects. They are a .Net Standard 2.0 library, a console program and a Test Centre. The purpose of this repository is to provide a way for people to add grids to images. https://www.craigoates.net/Software/project/13
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

116 lines
4.2 KiB

// These DLL's must be built before you can use them in this script.
#r "bin\Debug\System.Drawing.Common.dll"
#r @"..\packages\SmoulderingBeachBall.2.0.0\lib\netstandard2.0\SmoulderingBeachBall.dll"
open System
open System.Drawing
open System.Reflection
open SmoulderingBeachBall.Domain
open SmoulderingBeachBall.Services
open System.Threading
open System.IO
let loadLocation = __SOURCE_DIRECTORY__ + "/LoadingTestArea"
let saveLocation = __SOURCE_DIRECTORY__ + "/SavingTestArea"
let random = Random()
(* Resetting the Testing Area Folders Scripts
===============================================================================
The following scripts are for when you need to "manually" clear out the
LoadingTestArea and SavingTestArea folders. If you do not want to open up the
folder in Explorer and delete the files that way, just run the scripts in this
section. If you reset the LoadingTestArea, you will need to repopulate it using
the "Populating LoadingTestArea Folder Scripts" below. *)
let resetSavingTestArea () =
let files = Directory.GetFileSystemEntries(saveLocation, "*.png")
match files.Length with
| 0 -> ()
| _ ->
files
|> Array.iter (fun f -> File.Delete(f))
let resetLoadingTestArea () =
let files = Directory.GetFileSystemEntries(loadLocation, "*.png")
match files.Length with
| 0 -> ()
| _ ->
files
|> Array.iter (fun f -> File.Delete(f))
// Run these when the above functions have been added to F# interactive.
resetSavingTestArea ()
resetLoadingTestArea ()
(* Populating LoadingTestArea Folder Scripts
===============================================================================
The following scripts are to help you populate a test folder with test images.
You can then use these images in LibraryTests.fs -- Property Tests.
The tests consists of loading images from LoadingTestArea, transforming them
and saving them in SavingTestArea. *)
let allColours =
let properties =
typeof<Brushes>.GetProperties(BindingFlags.Public ||| BindingFlags.Static)
seq { for prop in properties -> prop}
|> Seq.toArray
let randomBrush () =
let item = allColours.[random.Next(allColours.Length)]
item.GetValue(null, null)
let generateDimensionSizes total =
List.init total (fun _ -> random.Next(3000))
let randomSize (sizes: int list) =
// (Sleep) Helps to reduce chance of picking the same item twice in quick succession.
Thread.Sleep 100
sizes.Item (random.Next(sizes.Length))
let populateSpec sizes =
let spec: SmoulderingBeachBall.Domain.DomainTypes.ImageSpec =
{ filePath = loadLocation
width = randomSize (sizes)
height = randomSize (sizes)
colour = (randomBrush ()) :?> Brush
overlay = None }
spec
let generateSpecs amount =
let imageSizes = generateDimensionSizes amount
[for i in 0 .. amount -> (populateSpec (imageSizes)) ]
let generateImage (spec: ImageSpec) =
printfn "[INFO.] Creating image [Width: %i] [Height: %i] ..." (spec.width) (spec.height)
makeImage spec
let populateLoadingTestArea () =
printfn "[INFO.] Populating LoadingTestArea..."
generateSpecs 100
|> List.map generateImage
|> Async.Parallel
|> Async.RunSynchronously
|> ignore
printfn "[INFO.] Finishing populating /LoadingTestArea."
// You should only need this once.
// Make sure you have passed the above into F# Interactive.
populateLoadingTestArea ()
(* Creating the Saving Test Area Script
==============================================================================
This bit of code is for creating the SavingTestArea folder which Test Centre
will use when it runs its tests. You will normally only need to run this code
when you have just cloned this repository or you accidently deleted said
folder. In other words, you should only need to use it once. *)
let createSavingTestArea () =
match Directory.Exists saveLocation with
| false ->
Directory.CreateDirectory saveLocation |> ignore
printfn "SavingTestArea created."
| _ -> printfn "SavingTestArea already exists."
(* Before calling this function, make sure the test checking to see if this
folder exists is failing first. *)
createSavingTestArea ()