Skip to content

Commit

Permalink
Fix randomize vals wrapping around to ngative vals
Browse files Browse the repository at this point in the history
* Use modulus to ensure values are within valid ranges
  • Loading branch information
nullbio committed Mar 4, 2017
1 parent 9067237 commit 60a40ea
Show file tree
Hide file tree
Showing 2 changed files with 28 additions and 14 deletions.
29 changes: 15 additions & 14 deletions randomize/randomize.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ package randomize
import (
"database/sql"
"fmt"
"math"
"math/rand"
"reflect"
"regexp"
Expand Down Expand Up @@ -71,7 +72,7 @@ func NewSeed() *Seed {
}

func (s *Seed) nextInt() int {
return int(atomic.AddInt64((*int64)(s), 1))
return int(atomic.AddInt64((*int64)(s), 1)) % math.MaxInt32
}

// Struct gets its fields filled with random data based on the seed.
Expand Down Expand Up @@ -501,23 +502,23 @@ func getStructRandValue(s *Seed, typ reflect.Type) interface{} {
case typeNullFloat64:
return null.NewFloat64(float64(s.nextInt()%10)/10.0+float64(s.nextInt()%10), true)
case typeNullInt:
return null.NewInt(int(int32(s.nextInt())), true)
return null.NewInt(int(int32(s.nextInt()))%math.MaxInt32, true)
case typeNullInt8:
return null.NewInt8(int8(s.nextInt()), true)
return null.NewInt8(int8(s.nextInt())%math.MaxInt8, true)
case typeNullInt16:
return null.NewInt16(int16(s.nextInt()), true)
return null.NewInt16(int16(s.nextInt())%math.MaxInt16, true)
case typeNullInt32:
return null.NewInt32(int32(s.nextInt()), true)
return null.NewInt32(int32(s.nextInt())%math.MaxInt32, true)
case typeNullInt64:
return null.NewInt64(int64(s.nextInt()), true)
case typeNullUint:
return null.NewUint(uint(s.nextInt()), true)
case typeNullUint8:
return null.NewUint8(uint8(s.nextInt()), true)
return null.NewUint8(uint8(s.nextInt())%math.MaxUint8, true)
case typeNullUint16:
return null.NewUint16(uint16(s.nextInt()), true)
return null.NewUint16(uint16(s.nextInt())%math.MaxUint16, true)
case typeNullUint32:
return null.NewUint32(uint32(s.nextInt()), true)
return null.NewUint32(uint32(s.nextInt())%math.MaxUint32, true)
case typeNullUint64:
return null.NewUint64(uint64(s.nextInt()), true)
case typeNullBytes:
Expand Down Expand Up @@ -590,21 +591,21 @@ func getVariableRandValue(s *Seed, kind reflect.Kind, typ reflect.Type) interfac
case reflect.Int:
return s.nextInt()
case reflect.Int8:
return int8(s.nextInt())
return int8(s.nextInt() % math.MaxInt8)
case reflect.Int16:
return int16(s.nextInt())
return int16(s.nextInt() % math.MaxInt16)
case reflect.Int32:
return int32(s.nextInt())
return int32(s.nextInt() % math.MaxInt32)
case reflect.Int64:
return int64(s.nextInt())
case reflect.Uint:
return uint(s.nextInt())
case reflect.Uint8:
return uint8(s.nextInt())
return uint8(s.nextInt() % math.MaxUint8)
case reflect.Uint16:
return uint16(s.nextInt())
return uint16(s.nextInt() % math.MaxUint16)
case reflect.Uint32:
return uint32(s.nextInt())
return uint32(s.nextInt() % math.MaxUint32)
case reflect.Uint64:
return uint64(s.nextInt())
case reflect.Bool:
Expand Down
13 changes: 13 additions & 0 deletions testdata/mysql_test_schema.sql
Original file line number Diff line number Diff line change
Expand Up @@ -352,3 +352,16 @@ CREATE TABLE pilot_languages (
ALTER TABLE pilot_languages ADD CONSTRAINT pilot_language_pkey PRIMARY KEY (pilot_id, language_id);
ALTER TABLE pilot_languages ADD CONSTRAINT pilot_language_fkey FOREIGN KEY (pilot_id) REFERENCES pilots(id);
ALTER TABLE pilot_languages ADD CONSTRAINT languages_fkey FOREIGN KEY (language_id) REFERENCES languages(id);

CREATE TABLE powers_of_two (
vid int(10) unsigned NOT NULL AUTO_INCREMENT,
name varchar(255) NOT NULL DEFAULT '',
machine_name varchar(255) NOT NULL DEFAULT '',
description longtext,
hierarchy tinyint(3) unsigned NOT NULL DEFAULT '0',
module varchar(255) NOT NULL DEFAULT '',
weight int(11) NOT NULL DEFAULT '0',
PRIMARY KEY (vid),
UNIQUE KEY machine_name (machine_name),
KEY list (weight,name)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;

0 comments on commit 60a40ea

Please sign in to comment.