# This file contains all the necessary code to perform tests based on the following Car database. require "json" require "../src/dodb.cr" require "./spec-database.cr" class Car include JSON::Serializable property name : String # unique to each instance (1-1 relations) property color : String # a simple attribute (1-n relations) property keywords : Array(String) # tags about a car, example: "shiny" (n-n relations) def_clone def initialize(@name, @color, @keywords) end class_getter cars = [ Car.new("Corvet", "red", [ "shiny", "impressive", "fast", "elegant" ]), Car.new("SUV", "red", [ "solid", "impressive" ]), Car.new("Mustang", "red", [ "shiny", "impressive", "elegant" ]), Car.new("Bullet-GT", "red", [ "shiny", "impressive", "fast", "elegant" ]), Car.new("GTI", "blue", [ "average" ]), Car.new("Deudeuch", "violet", [ "dirty", "slow", "only French will understand" ]) ] # Equality is true if every property is identical. def ==(other) @name == other.name && @color == other.color && @keywords == other.keywords end end def ram_indexes(storage : DODB::Storage) n = storage.new_RAM_index "name", &.name c = storage.new_RAM_partition "color", &.color k = storage.new_RAM_tags "keyword", &.keywords return n, c, k end def cached_indexes(storage : DODB::Storage) n = storage.new_index "name", &.name c = storage.new_partition "color", &.color k = storage.new_tags "keyword", &.keywords return n, c, k end def uncached_indexes(storage : DODB::Storage) n = storage.new_uncached_index "name", &.name c = storage.new_uncached_partition "color", &.color k = storage.new_uncached_tags "keyword", &.keywords return n, c, k end def add_cars(storage : DODB::Storage, nb_iterations : Int32, from = 0) i = from car1 = Car.new "Corvet", "red", [ "shiny", "impressive", "fast", "elegant" ] car2 = Car.new "Bullet-GT", "blue", [ "shiny", "fast", "expensive" ] car3 = Car.new "Deudeuche", "beige", [ "curvy", "sublime" ] car4 = Car.new "Ford-5", "red", [ "unknown" ] car5 = Car.new "C-MAX", "gray", [ "spacious", "affordable" ] while i < nb_iterations car1.name = "Corvet-#{i}" car2.name = "Bullet-GT-#{i}" car3.name = "Deudeuche-#{i}" car4.name = "Ford-5-#{i}" car5.name = "C-MAX-#{i}" storage << car1 storage << car2 storage << car3 storage << car4 storage << car5 i += 1 #STDOUT.write "\radding value #{i}".to_slice end #puts "" end