public void GenerateSolverRun() { var l = new LibraryComponent(); var lib1 = l.LoadLegacySokoSolve_SSX(l.GetPathData(@".\LegacySSX\Sasquatch.ssx")); var lib2 = l.LoadLegacySokoSolve_SSX(l.GetPathData(@".\LegacySSX\SasquatchIII.ssx")); var lib3 = l.LoadLegacySokoSolve_SSX(l.GetPathData(@".\LegacySSX\SasquatchIV.ssx")); var lib4 = l.LoadLegacySokoSolve_SSX(l.GetPathData(@".\LegacySSX\Thinking Rabbit Inc, Origonal.ssx")); var pool = new List<LibraryPuzzle>(lib1); pool.AddRange(lib2); pool.AddRange(lib3); pool.AddRange(lib4); var rep = new SokoDBRepository(); int cc = 0; foreach (var puzzle in pool.OrderBy(x=>StaticAnalysis.CalculateRating(x))) { Console.WriteLine("Puzzle.{0}={1}", cc++, puzzle.Ident); var dto = new PuzzleDTO() { Name = puzzle.Name, CharMap = puzzle.ToString(), Rating = (int)StaticAnalysis.CalculateRating(puzzle), Hash = puzzle.GetHashCode(), SourceIdent = puzzle.Ident.ToString(), Created = DateTime.Now, Modified = DateTime.Now }; dto = rep.Confirm(dto); Assert.That(dto.PuzzleId, Is.Not.EqualTo(0)); } Assert.That(lib1, Is.Not.Null); Assert.That(lib1.Count, Is.EqualTo(50)); }
public PuzzleDTO Confirm(PuzzleDTO dto) { var exist = Get(dto.CharMap); if (exist != null) return exist; Store(dto); return dto; }
PuzzleDTO Bind(IDataReader row) { var item = new PuzzleDTO(); item.PuzzleId = puzzleBinder.GetInt(row, "PuzzleId"); item.Name = puzzleBinder.GetString(row, "Name"); item.Hash = puzzleBinder.GetInt(row, "Hash"); item.Rating = puzzleBinder.GetInt(row, "Rating"); item.CharMap = puzzleBinder.GetString(row, "CharMap"); item.Created = puzzleBinder.GetDateTime(row, "Created"); item.Modified = puzzleBinder.GetDateTime(row, "Modified"); item.Author = puzzleBinder.GetString(row, "Author"); item.Url = puzzleBinder.GetString(row, "Url"); item.Email = puzzleBinder.GetString(row, "Email"); item.SourceIdent = puzzleBinder.GetString(row, "SourceIdent"); return item; }
public Puzzle ToDomain(PuzzleDTO dto) { return new Puzzle(dto.CharMap) { Name = dto.Name, Tag = dto }; }
public void Store(PuzzleDTO item) { item.PuzzleId = DBHelper.ExecuteScalarCommand<int>(GetConnection(), @"INSERT INTO [Puzzle] ( Name, Hash, Rating, CharMap, Created, Modified, Author, Url, Email, SourceIdent ) VALUES ( {1}, -- Name {2}, -- Hash {3}, -- Rating {4}, -- CharMap {5}, -- Created {6}, -- Modified {7}, -- Author {8}, -- Url {9}, -- Email {10} -- SourceIdent ); SELECT CAST(@@IDENTITY AS int);", item.PuzzleId, item.Name, item.Hash, item.Rating, item.CharMap, item.Created, item.Modified, item.Author, item.Url, item.Email, item.SourceIdent ); }
private void StoreSolution(ISolver solver, PuzzleDTO dto, List<Path> solutions) { var best = solutions.OrderBy(x => x.Count).First(); var sol = new SolutionDTO() { PuzzleREF = dto.PuzzleId, CharPath = best.ToString(), Created = DateTime.Now, Modified = DateTime.Now, HostMachine = Environment.MachineName, SolverType = solver.GetType().Name, SolverVersionMajor = solver.VersionMajor, SolverVersionMinor = solver.VersionMinor, SolverDescription = solver.VersionDescription, TotalNodes = solver.Statistics.First().TotalNodes, TotalSecs = (decimal) solver.Statistics.First().DurationInSec, }; var exists = Repository.GetSolutions(dto.PuzzleId); if (exists.Any()) { var thisMachine = exists.FindAll(x => x.HostMachine == sol.HostMachine && x.SolverType == sol.SolverType); if (thisMachine.Any()) { var exact = thisMachine.OrderByDescending(x => x.CharPath.Length).First(); // Is Better if (exact.TotalSecs > sol.TotalSecs) { // Replace sol.SolutionId = exact.SolutionId; sol.Created = exact.Created; Repository.Update(sol); } } else { Repository.Store(sol); } } else { Repository.Store(sol); } }