blob: 4e00da662c0f49c6cb940a83217efc850b7b0204 [file] [log] [blame]
// Licensed to the Apache Software Foundation (ASF) under one
// or more contributor license agreements. See the NOTICE file
// distributed with this work for additional information
// regarding copyright ownership. The ASF licenses this file
// to you under the Apache License, Version 2.0 (the
// "License"); you may not use this file except in compliance
// with the License. You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package statefun
import (
"bytes"
"github.com/stretchr/testify/assert"
"math"
"testing"
)
func TestBoolType(t *testing.T) {
testBool(t, true)
testBool(t, false)
}
func testBool(t *testing.T, data bool) {
buffer := bytes.Buffer{}
err := BoolType.Serialize(&buffer, data)
assert.NoError(t, err)
var result bool
err = BoolType.Deserialize(bytes.NewReader(buffer.Bytes()), &result)
assert.NoError(t, err)
assert.Equal(t, data, result)
}
func TestIntType(t *testing.T) {
testInt32(t, 1)
testInt32(t, 1048576)
testInt32(t, math.MaxInt32)
testInt32(t, math.MinInt32)
testInt32(t, -1)
}
func testInt32(t *testing.T, data int32) {
buffer := bytes.Buffer{}
err := Int32Type.Serialize(&buffer, data)
assert.NoError(t, err)
var result int32
err = Int32Type.Deserialize(bytes.NewReader(buffer.Bytes()), &result)
assert.NoError(t, err)
assert.Equal(t, data, result)
}
func TestLongType(t *testing.T) {
testInt64(t, -1)
testInt64(t, 0)
testInt64(t, math.MinInt64)
testInt64(t, math.MaxInt64)
}
func testInt64(t *testing.T, data int64) {
buffer := bytes.Buffer{}
err := Int64Type.Serialize(&buffer, data)
assert.NoError(t, err)
var result int64
err = Int64Type.Deserialize(bytes.NewReader(buffer.Bytes()), &result)
assert.NoError(t, err)
assert.Equal(t, data, result)
}
func TestFloatType(t *testing.T) {
testFloat32(t, math.MaxFloat32)
testFloat32(t, math.SmallestNonzeroFloat32)
testFloat32(t, 2.1459)
testFloat32(t, -1e4)
}
func testFloat32(t *testing.T, data float32) {
buffer := bytes.Buffer{}
err := Float32Type.Serialize(&buffer, data)
assert.NoError(t, err)
var result float32
err = Float32Type.Deserialize(bytes.NewReader(buffer.Bytes()), &result)
assert.NoError(t, err)
assert.Equal(t, data, result)
}
func TestDoubleType(t *testing.T) {
testFloat64(t, math.MaxFloat64)
testFloat64(t, math.SmallestNonzeroFloat64)
testFloat64(t, 2.1459)
testFloat64(t, -1e4)
}
func testFloat64(t *testing.T, data float64) {
buffer := bytes.Buffer{}
err := Float64Type.Serialize(&buffer, data)
assert.NoError(t, err)
var result float64
err = Float64Type.Deserialize(bytes.NewReader(buffer.Bytes()), &result)
assert.NoError(t, err)
assert.Equal(t, data, result)
}
func TestStringType(t *testing.T) {
testString(t, "")
testString(t, "This is a string")
}
func testString(t *testing.T, data string) {
buffer := bytes.Buffer{}
err := StringType.Serialize(&buffer, data)
assert.NoError(t, err)
var result string
err = StringType.Deserialize(bytes.NewReader(buffer.Bytes()), &result)
assert.NoError(t, err)
assert.Equal(t, data, result)
}
type User struct {
FirstName string `json:"first_name"`
LastName string `json:"last_name"`
}
func TestJsonType(t *testing.T) {
buffer := bytes.Buffer{}
userType := MakeJsonType(TypeNameFrom("org.foo.bar/UserJson"))
err := userType.Serialize(&buffer, User{"bob", "mop"})
assert.NoError(t, err)
var result User
err = userType.Deserialize(bytes.NewReader(buffer.Bytes()), &result)
assert.NoError(t, err)
assert.Equal(t, result, User{"bob", "mop"})
}