# 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 | DODB::NoIndex # a simple attribute (1-n relations) property keywords : Array(String) | DODB::NoIndex # 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_nilable_RAM_index "name", &.name c = storage.new_nilable_RAM_partition "color", &.color k = storage.new_nilable_RAM_tags "keyword", &.keywords return n, c, k end def cached_indexes(storage : DODB::Storage) n = storage.new_nilable_index "name", &.name c = storage.new_nilable_partition "color", &.color k = storage.new_nilable_tags "keyword", &.keywords return n, c, k end def uncached_indexes(storage : DODB::Storage) n = storage.new_nilable_uncached_index "name", &.name c = storage.new_nilable_uncached_partition "color", &.color k = storage.new_nilable_uncached_tags "keyword", &.keywords return n, c, k end # `max_indexes` limits the number of indexes (partitions and tags). # Once the last index (db last_index/5) is above this value, the following # cars won't be tagged nor partitionned. def add_cars(storage : DODB::Storage, nb_iterations : Int32, max_indexes = 5000) last_index = ((storage.last_index + 1) / 5).to_i i = 0 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-#{last_index}" car2.name = "Bullet-GT-#{last_index}" car3.name = "Deudeuche-#{last_index}" car4.name = "Ford-5-#{last_index}" car5.name = "C-MAX-#{last_index}" last_index += 1 if last_index > max_indexes car1.color = DODB.no_index car2.color = DODB.no_index car3.color = DODB.no_index car4.color = DODB.no_index car5.color = DODB.no_index car1.keywords = DODB.no_index car2.keywords = DODB.no_index car3.keywords = DODB.no_index car4.keywords = DODB.no_index car5.keywords = DODB.no_index end storage << car1.clone storage << car2.clone storage << car3.clone storage << car4.clone storage << car5.clone i += 1 #STDOUT.write "\radding value #{i}".to_slice end #puts "" end